Kilka dni temu doszło do niezwykłego incydentu , który wstrząsnął społecznością zajmującą się kernelem Linuxa: Linus Torvalds nakazał natychmiastowe zablokowanie konta Keesa Cooka na kernel.org po wykryciu zmanipulowanych zatwierdzeń w repozytorium Git tego programisty.
Keesowi Cookowi, znanemu ze swojej przywództwa w zespole ds. bezpieczeństwa Ubuntu i utrzymywania ponad tuzina podsystemów związanych z bezpieczeństwem jądra, tymczasowo zabroniono przesyłania zmian, dopóki nie wyjaśniono faktów.
Zmiana autorstwa i podpisów w repozytorium Keesa Cooka
Problem powstał w wyniku prośby o wprowadzenie zmian do gałęzi jądra 6.16, w której Linus zidentyfikował odniesienia do repozytorium zawierającego zmanipulowane zatwierdzenia, w których jego nazwisko było wymienione jako autor i osoba potwierdzająca, mimo że ich nie wprowadził. Jednym z najpoważniejszych przykładów było istnienie duplikatu zatwierdzenia, identycznego pod względem zawartości z oryginałem, ale z innym skrótem SHA1, który fałszywie zawierał podpis Linusa Torvaldsa.
Zmian tych nie można było przypisać wyłącznie przypadkowemu błędowi podczas operacji git rebase, gdyż wiązały się one z masową modyfikacją poufnych informacji, w tym z ponad 6.000 przepisanych zatwierdzeń, z czego 330 nosiło nazwisko Linusa jako autora.
Reakcja Torvaldsa: podejrzenia celowej manipulacji
Linus Torvalds nie krył swojego zaniepokojenia i opisał wydarzenia jako potencjalnie złośliwe:
„Jedna lub dwie poprawki mogą być błędem. Ale tysiące z nich, wiele z moim sfałszowanym podpisem, nie są” – oświadczył.
Biorąc pod uwagę skalę zmian i ryzyko, jakie niosło za sobą naruszenie integralności oficjalnego drzewa jądra, Torvalds zwrócił się do Konstantina Ryabitseva, administratora infrastruktury kernel.org, z prośbą o zablokowanie dostępu Keesa Cooka do czasu wyjaśnienia sytuacji.
W odpowiedzi Kees Cook wyjaśnił, że niedawno napotkał problemy techniczne , które mogły być przyczyną incydentu. Stwierdził, że jego dysk SSD nie działał prawidłowo podczas kopiowania, co spowodowało uszkodzenie kilku repozytoriów. Po wystąpieniu tych błędów podjął próbę przywrócenia stanu swojego repozytorium za pomocą polecenia `git rebase` i różnych narzędzi automatyzujących.
Operacje te zostały jednak wykonane na newralgicznych gałęziach , takich jak for-next/hardening i for-linus/hardening, co doprowadziło do przypadkowej modyfikacji historii repozytorium, w tym zmian w autorstwie commitów. Pomimo wyjaśnień, Linus pozostał sceptyczny.
„Nie rozumiem, jak mogło dojść do przypadkowego wyprzedzania, a co dopiero przy takiej liczbie zmian”.
Prawdziwy winowajca: git-filter-repo i zwiastuny b4
W kolejnej wiadomości Kees Cook zidentyfikował prawdopodobne źródło błędu : łączne użycie dwóch narzędzi, git-filter-repo i b4 trailers, które manipulują historią zatwierdzeń i zwiastunami (etykietami takimi jak Signed-off-by:) w zatwierdzeniach.
To niewłaściwe użycie narzędzi spowodowałoby automatyczne przepisanie tysięcy commitów , w tym zastąpienie autora wartością domyślną (w tym przypadku Linusa Torvaldsa), bez zauważenia błędu przez Keesa w tamtym momencie . Konstantin Ryabitsev, autor narzędzia b4, potwierdził tę teorię i zapewnił, że Cook nie miał złych intencji. W rzeczywistości system już generował ostrzeżenia, które były ignorowane.
Po wyjaśnieniu sytuacji, dostęp Keesa Cooka do kernel.org został przywrócony. W ramach działań zapobiegawczych ogłoszono, że narzędzie b4 będzie zawierało nową kontrolę bezpieczeństwa, która uniemożliwi modyfikację commitów, których autorstwo nie pokrywa się z tożsamością bieżącego użytkownika. Ma to na celu zapobieganie podobnym błędom i ochronę integralności kodu źródłowego jądra.
Kees ze swojej strony zobowiązał się do odtworzenia uszkodzonych gałęzi na podstawie poszczególnych poprawek i dogłębnej analizy kroków, które doprowadziły do błędu. Chociaż incydent ten nadwyrężył relacje w zespole programistów jądra, uwypuklił również wagę ostrożnego korzystania z narzędzi do przepisywania historii, zwłaszcza w tak krytycznych projektach jak jądro Linuksa.
Na koniec warto wspomnieć, że incydent między Linusem Torvaldsem i Keesem Cookiem stanowi ostrzeżenie przed niebezpieczeństwami związanymi z manipulowaniem historią zatwierdzania zmian i że dzięki szybkiej interwencji zespołu kernel.org oraz przejrzystości procesu, sytuację udało się opanować.
A jeśli chcesz dowiedzieć się więcej, szczegóły znajdziesz pod poniższym linkiem.