Mega Sekurak Hacking Party w Krakowie! 20.10.2025 r. Bilety -30%

Badacze zaprezentowali zdalne wykonanie kodu w klasycznej grze Heroes of Might and Magic V

11 czerwca 2025, 14:40 | W biegu | 0 komentarzy

W świecie bezpieczeństwa IT nie ma świętości – wręcz przeciwnie, im oprogramowanie jest bardziej “kultowe” (lub po prostu popularniejsze), tym na większą chwałę mogą liczyć hakerzy (oczywiście w białych kapeluszach), którzy udowodnią istnienie podatności. Badacze z Synacktiv wzięli na warsztat popularną grę strategiczną, wydaną przez Ubisoft w 2006 roku – Heroes of Might and Magic V. Testom poddana została najnowsza wersja – 1.60.

TLDR:

  • Badacze z Synacktiv pokazali jak można zaatakować grę Heroes of Might and Magic V
  • Klasyczny błąd wynikający z wykorzystania rozmiaru zadeklarowanego w nagłówku, a nie rzeczywistego (zmierzonego) po rozpakowaniu pliku z archiwum ZIP pliku mapy, prowadzi do przepełnienia bufora na stercie
  • Atakujący może wykorzystać kontrolę nad zapisywanymi bajtami do przejęcia przepływu w programie i doprowadzenia do wykonania kodu podczas obsługi customowych plików map w grze. 

Dostępna, między innymi, na platformie GOG gra, podbiła serca graczy fabułą, oprawą graficzną (gra wykorzystywała nowy silnik graficzny Silent Storm Engine) oraz możliwością customizacji. To właśnie ta ostatnia cecha spowodowała, że udało się odnaleźć poważną lukę bezpieczeństwa pozwalającą na wykonanie kodu. 

Gracze mogą poprawiać grywalność przez dodawanie nowych map. Wirtualne przestrzenie, w których może toczyć się rozgrywka, są przygotowywane w specjalnym kreatorze. Następnie mogą zostać umieszczone np. na stronie https://www.maps4heroes.com/, która służy do dzielenia się mapami między graczami. 

Same pliki map, z rozszerzeniem .h5m to w rzeczywistości archiwum .zip, zawierające kilka szczególnych plików:

  • name.txt – nazwa mapy
  • description.txt – opis mapy
  • map.xdb – XML z obiektami
  • MapScript.xml, – odwołania do skryptów Lua
  • MapScript.lua, – skrypty wywoływane w momencie zajścia jakiegoś zdarzenia 

Heroes of Might and Magic V wykorzystuje własną bibliotekę do obsługi formatu ZIP. 

Rysunek 1. Grafika reprezentująca nagłówek Local File Header przechowujący informacje o pojedynczym pliku w archiwum (źródło)

W trakcie dekompresji dane umieszczane są w buforze. Zanim jednak do tego dojdzie, alokowana jest pamięć, której rozmiar ustalany jest za pomocą wartości pola Uncompressed Size. Co za tym idzie, jeśli rzeczywista liczba bajtów przekracza zaalokowane miejsce, to dochodzi do przepełnienia bufora na stercie (ang. buffer overflow). 

Błąd ten pozwala (wykorzystując plik name.txt z rzeczywistą wielkością 0x2000 bajtów przy polu Uncompressed Size wskazującym na jedynie 0x800 bajtów) na nadpisanie vtable (struktura wykorzystywana do dynamicznego wiązania metod wirtualnych podczas wykonania kodu) innego obiektu. 

W momencie gdy ten obiekt (udało się ustalić, że będzie to NGScene::CLightStateNode) jest zwalniany, dochodzi do użycia metody wskazywanej przez vtable. Każdy kto zajmował się niskopoziomowym bezpieczeństwem zdaje sobie sprawę do czego to prowadzi. Atakujący jest w stanie zmienić wartość rejestrów wskazujących na stos (technika zwana stack pivot) a następnie uzyskać wykonanie kodu korzystając z techniki return oriented programmingu (napisanie własnego ROP chaina proponujemy jako ćwiczenie dla ambitnych). 

Atak został zademonstrowany na systemie Windows 10, a pełen PoC jest dostępny na blogu firmy. 

Jak się bronić? Wektorem ataku są pliki map. Wystrzeganie się pobierania i wykorzystywania map pochodzących z niezaufanych źródeł skutecznie zapobiega atakom tego typu. 

Badaczom gratulujemy ciekawego znaleziska, a graczom życzymy setek godzin niezapomnianej rozgrywki na bezpiecznych mapach :) 

~Black Hat Logan

Spodobał Ci się wpis? Podziel się nim ze znajomymi:



Komentarze

Odpowiedz