Okazało się, że w oprogramowaniu do obsługi Git (zarówno w kliencie jak i serwerze) znajduje się bug, który umożliwia wykonanie kodu w kontekście maszyny używającej tego oprogramowania.
Na czym polega problem? W trakcie wykonywania polecenia push lub clone wywoływana jest procedura mająca błąd, która przy obsłudze dużych plików może zapisać treść repozytorium w niezaalokowanym obszarze pamięci (poprzez przepełnienie sterty). To daje nam drogę do umieszczenia w pamięci assembly, które może być potem uruchomione bez nadzoru. Podatność została zarejestrowana pod numerem CVE‑2016‑2315. Warto zajrzeć tutaj. Wyjaśniony jest dokładnie problem w kodzie Git’a.
Błąd znajduje się we wszystkich wersjach niższych niż 2.7.4. Wcześniej podawano, że dziura została załatana już w wersji 2.7.1 oraz 2.7.3, ale zgodnie z tym co jest napisane tutaj żaden z fixów od wersji 2.7.0 nie był wrzucany do gałęzi master, więc poprawki nie szły do publikacji. Z tego co widzę w wersji 2.7.4 poprawka już jest.
Jeszcze jedna ważna rzecz. Git jest wbudowany w wiele różnego rodzaju oprogramowania, których autorzy nie zawsze szybko reagują na poprawki. gerrit‑gc, BitBucket czy GitLab nadal mogą mieć te dziurę.
Pozdrawiam bezpiecznie…