Разработчик и сопровождающий языка программирования PHP Никита Попов рассказал новые детали об инциденте, связанном с безопасностью git.php.net
.
По словам Никиты Попова, когда первый вредоносный коммит был внедрен от имени создателя PHP Расмуса Лердорфа, его первоначальной реакцией было отменить изменение и отозвать доступ на коммит для учетной записи Расмуса. Он исходил из предположения, что учетная запись была скомпрометирована. Но, как Попов понял позже, это действие не имело смысла, потому что не было оснований полагать, что атака произошла через аккаунт Расмуса: любая учетная запись с доступом к репозиторию php-src
могла выполнить атаку под вымышленным именем.
Когда второй вредоносный коммит был внедрен уже от имени Никиты Попова, он просмотрел журналы установки gitolite
, чтобы определить, какая учетная запись на самом деле использовалась для атаки. Хотя все смежные коммиты были учтены, записи git-receive-pack
для двух вредоносных коммитов отсутствовали, что означало, что эти два коммита полностью обошли инфраструктуру gitolite
. Это специалисты интерпретировали как вероятное свидетельство взлома сервера.
Вскоре после этого в PHP решили прекратить работу с git.php.net
и вместо этого сделать GitHub основным хостом репозитория. По словам Никиты Попова, сохранение собственной инфраструктуры Git потребовало бы настройки нового сервера git.php.net
после определения основной причины компрометации. Это заняло бы много времени и нарушило бы разработку PHP. Выбор пал на базовую миграцию на GitHub, поскольку большинство репозиториев уже были зеркальными.
Согласно заявлению Попова, в то время он не знал, что git.php.net
поддерживает отправку изменений не только через SSH (с использованием инфраструктуры gitolite
и криптографии с открытым ключом), но и через HTTPS. Последний не использовал gitolite
, а вместо этого использовал git-http-backend
аутентификации Apache2 Digest в базе данных пользователей master.php.net
.
Основываясь на журналах доступа, в PHP определили, что коммиты были отправлены с использованием HTTPS и аутентификации на основе пароля. Отрывок из соответствующих записей журнала представлен ниже:
[redacted] - rasmus@[redacted] [27/Mar/2021:19:19:23 -0700] "GET /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941 [redacted] - rasmus@[redacted] [27/Mar/2021:19:19:28 -0700] "GET /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941 [redacted] - rasmus [27/Mar/2021:20:56:51 -0700] "GET /push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 200 125315 [redacted] - rasmus [27/Mar/2021:20:58:13 -0700] "POST /push/php-src.git/git-receive-pack HTTP/1.1" 200 1080 [redacted] - nikita.ppv [28/Mar/2021:09:09:15 -0700] "GET /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941 [redacted] - nikita.ppv [28/Mar/2021:09:09:18 -0700] "GET /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941 [redacted] - nikitappv [28/Mar/2021:09:09:35 -0700] "GET /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941 [redacted] - nikitappv [28/Mar/2021:09:09:36 -0700] "GET /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941 [redacted] - nikita [28/Mar/2021:09:09:50 -0700] "GET /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941 [redacted] - nikita [28/Mar/2021:09:09:53 -0700] "GET /push/php-src.git/info/refs?service=git-upload-pack HTTP/1.1" 401 941 [redacted] - nikic [28/Mar/2021:09:11:31 -0700] "GET /push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 401 941 [redacted] - nikic [28/Mar/2021:09:11:31 -0700] "GET /push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 401 941 [redacted] - nikic [28/Mar/2021:09:13:28 -0700] "GET /push/php-src.git/info/refs?service=git-receive-pack HTTP/1.1" 200 123263 [redacted] - nikic [28/Mar/2021:09:13:39 -0700] "POST /push/php-src.git/git-receive-pack HTTP/1.1" 200 1079
Никита Попов отмечает, что злоумышленнику удавалось успешно проходить аутентификацию с нескольких заходов. И хотя у команды PHP нет никаких конкретных доказательств, возможное объяснение — утечка пользовательской базы данных master.php.net
. Вот что уже сделано для повышения безопасности системы:
main.php.net
.php.net
были сброшены. Установить новый пароль можно здесь;git.php.net
и svn.php.net
теперь доступны только для чтения.Один из пользователей Reddit отметил, что, если это была хеш-атака, и учитывая закономерности HTTP-аутентификации, фактический ключ доступа для пользователей хранился в базе данных в виде обычного текста, что и могло привести к утечке.
Прокси (proxy), или прокси-сервер — это программа-посредник, которая обеспечивает соединение между пользователем и интернет-ресурсом. Принцип…
Согласитесь, было бы неплохо соединить в одно сайт и приложение для смартфона. Если вы еще…
Повсеместное распространение смартфонов привело к огромному спросу на мобильные игры и приложения. Миллиарды пользователей гаджетов…
В перечне популярных чат-ботов с искусственным интеллектом Google Bard (Gemini) еще не пользуется такой популярностью…
Скрипт (англ. — сценарий), — это небольшая программа, как правило, для веб-интерфейса, выполняющая определенную задачу.…
Дедлайн (от англ. deadline — «крайний срок») — это конечная дата стачи проекта или задачи…