Инцидент с подменой коммитов в ветке ядра Linux от Кеса Кука

Линус Торвальдс потребовал от администратора kernel.org немедленно заблокировать учётную запись Кеса Кука, бывшего главного сисадмина kernel.org и лидера Ubuntu Security Team, сопровождающего в ядре 14 подсистем, связанных с безопасностью. Константин Рябцев, отвечающий на работу инфраструктуры kernel.org выполнил блокировку. Поводом для блокировки послужил pull-запрос на включение в ветку ядра 6.16 изменений, ссылающийся на git-репозиторий, в котором была изменена информация об авторстве некоторых коммитов.

В поддерживаемом Кесом git-репозитории присутствовали фиктивные изменения, в поле автора и коммитера в которых был указан “Linus Torvalds”, но Линус их не добавлял. Например, под именем Линуса в ветке Кеса имелся коммит, который повторял другой коммит в ветке Линуса, но с другим хэшем SHA1. Оба коммита выглядят одинаково, за исключением информации о подписи.

Изменения не походили на случайную ошибку при выполнении операции “git rebase”, так как содержали неверную информацию об авторе коммита.
Линус Торвальдс посчитал это следами потенциально вредоносной активности и инициировал блокировку приёма любых изменений от Кеса, до выяснения причин подобных манипуляций и подтверждения, что система Кеса не была скомпрометирована.

Кес ответил, что не понимает, как такое могло произойти. До этого он столкнулся с проблемами при попытке объединения нескольких своих git-веток, после чего попытался решить их операцией “git rebase”, но похоже это не помогло. Всё это происходило на фоне сбоя SSD-накопителя, выдававшего ошибки во время копирования. Кес считал, что после сбоя ему удалось восстановить состояние своих репозиториев, но судя по всему это не так. Для восстановления целостности Кес намерен пересоздать свои ветки из отдельных патчей. В качестве наиболее вероятной причины возникшей подмены автора Кес считает неудачную попытку восстановления репозитория после его повреждения.

Линуса не устроило такое объяснение, так как, по его мнению, изменения истории коммитов в репозитории Кеса очень похожи на преднамеренные действия, а не на случайный сбой. Перебазирование истории изменений операцией “git rebase” могло объяснить перезапись коммитера, но Линус не может понять, как подобная операция “git rebase” могла быть совершена по ошибке.

Перезапись одного или двух коммитов ещё можно было списать на ошибку, но в репозитории Кеса были перезаписаны более шести тысяч merge-коммитов, из которых в 330 автором был выставлен Линус, при том, что данные коммиты не были получены из git-дерева Линуса. Совершённые изменения больше напоминают работу скрипта, чем результат повреждения информации на накопителе, так как они требуют отдельного пересоздания копии каждого коммита.

Кес уверил Линуса, что не делал этого специально и не стал был проводить подобные эксперименты без предупреждения (например, прошлый эксперимент по вызову коллизий коммитов был согласован с Линусом). На этой неделе он производил несколько ручных операций с репозиторием и теперь попытается разобраться что пошло не так и воспроизвести проблему. Например, Кес выполнял операцию rebase для git-деревьев for-next/hardening и for-linus/hardening, используя в отличие от прошлых подобных преобразований ветку “master”, а не rc2. В ходе данной операции он вносил изменения в скрипты для проверки push-запросов.

Release. Ссылка here.