The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

Доступ к данным из удалённых и приватных репозиториев на GitHub, имеющих форки

25.07.2024 10:35

Компания Truffle Security опубликовала сценарии атак на несколько типовых приёмов работы с репозиториями на GitHub, позволяющие извлечь данные из удалённых репозиториев, у которых имеются публичные форки или которые были созданы как форки.

Возможность доступа к коммитам по хэшу во всех связанных форками репозиториях вызвано тем, что GitHub в целях оптимизации и исключения дубликатов хранит вместе все объекты из основного репозитория и форков, лишь логически разделяя принадлежность коммитов. Подобное хранение позволяет просмотреть в основном репозитории любой коммит из любого форка, явно указав его хэш в URL. Например, пользователь может создать форк репозитория "/torvalds/linux" и добавить в него любой код, после чего этот код станет доступен по прямой хэш-ссылке в репозитории "/torvalds/linux". В случае удаления репозитория, если имеется хотя бы один публичный форк, данные из удалённого репозитория остаются доступны по хэшу коммита.

Предлагается три сценария, представляющих угрозу безопасности:

  • Первый сценарий затрагивает ситуации, когда разработчики создают форки публичных репозиториев, добавляют в них изменения, экспериментируют, а затем удаляют. Помимо утечки кода, который не предназначен для публикации, опасность представляет ситуация, когда в экспериментах в код файлов с примерами добавляются рабочие ключи доступа к API. В этом случае атакующий может получить доступ к изменению по хэшу коммита, адресуемому после удаления форка через основной репозиторий. Например, предложенным способом исследователи смогли определить 30 рабочих ключей доступа к API, изучив три связанных с машинным обучением репозитория с большим числом форков.
  • Второй сценарий касается возможности получения доступа к данным после удаления первичного репозитория, если для этого репозитория были созданы форки. В качестве примера приводится случай, когда в публичном репозитории одной компании были случайно опубликованы закрытые ключи одного из сотрудников, позволяющие получить полный доступ ко всем репозиториям данной компании на GitHub. Компания удалила репозиторий через который была утечка, но ключи по-прежнему остались доступны для извлечения через обращения по хэшу коммита в репозиториях с форками.

  • Третий сценарий связан с моделью разработки проектов, которые развивают базовую открытую версию в публичном репозитории и расширенную проприетарную версию в приватном. Если компания изначально развивала проект в приватном репозитории, а затем после открытия кода проекта перевела его в разряд публичных, но продолжила разработку закрытой внутренней или расширенной версии в приватном форке, имеется возможность доступа к добавленным в приватный форк изменениям по хэшам коммитов через публичный репозиторий. При этом доступ возможен только к изменениям, добавленным в приватный форк до перевода основного репозитория в разряд публичных (хранилища приватных и публичных репозиториев разделяются, но, когда два репозитория были приватными, коммиты хранились совместно, поэтому остались в репозитории после его перевода в разряд публичных).

Трюк, позволяющий получить доступ к коммитам в форках репозитория через ссылку на основной репозиторий, известен уже много лет и периодически используется для различных шуток и ввода в заблуждение разработчиков (например, шутники периодически подобным образом создают видимость подстановки бэкдоров в репозиторий с ядром Linux на GitHub). В качестве меры для противодействия подобным шуткам GitHub добавил предупреждение о том, что запрошенный коммит не относится к веткам в текущем репозитории и возможно принадлежит форку. При этом сама возможность доступа к коммитам по хэшу в любых связанных форками репозиториях рассматривалась как безобидная, так как для обращения к данным в удалённых и приватных форках требуется знание хэша коммита.

Подобрать хэш коммита, формируемый на базе алгоритма SHA-1 и включающий 32 символа, не реально, но оказалось, что это и не требуется. GitHub поддерживает сокращённую форму обращения к коммитам, позволяющую адресовать изменения по нескольким первым символам хэша, если отсутствуют пересечения с другими коммитами. Минимальное число символов для сокращённой адресации хэша - 4, что соответствует перебору всего 65 тысяч комбинаций (16^4). При этом перебор может и не потребоваться, так как API GitHub позволяет подключать обработчики для перехвата событий, которые используются сторонними проектами, ведущими архив с полным логом всех операций, в котором информация о хэшах коммитов остаётся и после удаления репозиториев.

  1. Главная ссылка к новости (https://news.ycombinator.com/i...)
  2. OpenNews: Особенность отображения проектов на GitHub создала видимость внедрения бэкдора в ядро Linux
  3. OpenNews: В GitHub устранена уязвимость, допускающая внедрение кода в любой репозиторий
  4. OpenNews: Через уязвимость в GitHub от имени Линуса Торвальдса создан фиктивный репозиторий linux-ng
  5. OpenNews: В сеть попали исходные коды GitHub и GitHub Enterprise
  6. OpenNews: Трюк с определением персональных данных через SSH
Лицензия: CC BY 3.0
Короткая ссылка: https://opennet.ru/61605-github
Ключевые слова: github, fork
При перепечатке указание ссылки на opennet.ru обязательно


Обсуждение (26) Ajax | 1 уровень | Линейный | +/- | Раскрыть всё | RSS
  • 1.1, Аноним (1), 11:14, 25/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • –3 +/
    Дагестанские ученые открыли дверь. Уже обсасывали эту новость, гитхаб уже давно добавил плашку "вы смотрите изменения в форке!! в апстриме таких правок нет!!"
     
     
  • 2.2, анон (?), 11:22, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • +9 +/
    Опять новость до конца не дочитал?
     
  • 2.3, IdeaFix (ok), 11:23, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    В апстринме этих АПИ коючей нет!


    Ну а если серьезно, то не стоит тащить в "лабу с ключами" в гитхаб.

     
     
  • 3.5, Аноним (5), 11:32, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Не надо пользоваться гитхабом
     
     
  • 4.6, nume (ok), 11:51, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Не надо пользоваться интернетом
     
  • 4.24, Аноним (24), 16:09, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • –2 +/
    Гитхаб самая популярная платформа. Хостишься на других - автоматически снижаешь количество потенциальных коммитеров. Если цель не работать, а скакать между хостингами - можно хоть в локальный гит класть.
     
     
  • 5.35, Аноним (35), 23:09, 26/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    Если цель не работать, а привлекать любых соблазнившизся коммитеров - тогда да.
    В остальном всё с ног на голову: ценность не в коде, который ты собрался писать, а в чужой платформе, куда ты собрался все выкладывать.
     

  • 1.4, Аноним (5), 11:32, 25/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Так вроде сама концепция Гита это и подразумевает.
     
     
  • 2.7, Аноним (7), 12:07, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    Нет
     

  • 1.8, pavlinux (ok), 12:07, 25/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +3 +/
    >  позволяющие извлечь данные из удалённых репозиториев, у которых имеются публичные форки

    Ну желаю им удачи извлечь что-то из 192.168.0.1

     
     
  • 2.13, Аноним (-), 12:29, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • +2 +/
    > Ну желаю им удачи извлечь что-то из 192.168.0.1

    Халявный интернет из него довольно неплохо извлекается, если что :)

     
     
  • 3.15, pavlinux (ok), 12:40, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >> Ну желаю им удачи извлечь что-то из 192.168.0.1
    > Халявный интернет из него довольно неплохо извлекается, если что :)

    Давай подробнее, скрипты, сценарии, ссылки,  а то ж через /dev/astral  каждый может.

    Внешний IPшник сейчас 85.140.171.130 - жду!




    # netstat -tucln -p
    Active Internet connections (only servers)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      1725/dnsmasq        
    udp        0      0 127.0.0.1:53            0.0.0.0:*                           1725/dnsmasq        
    udp        0      0 224.0.0.251:5353        0.0.0.0:*                           3728/chrome      


     
     
  • 4.20, pavlinux (ok), 13:04, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    > Внешний IPшник сейчас 85.140.171.130 - жду!

    Обломись, lease time уже протух, ищи рядом  - 85.140.0.0/16

     
  • 3.16, Аноним (16), 12:41, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Прямо очень халявный — заплатил провайдеру и пользуешься.
     

  • 1.11, pavlinux (ok), 12:09, 25/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    >  позволяющие получить полный доступ ко всем репозиториям  на GitHub.

    А, всë таки на житхаб, а не удалëнно?!  

     
  • 1.17, Соль земли (?), 12:54, 25/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Первый сценарий: делаем временные API ключи.
    Второй сценарий: github должен добавить purge. Потому что удалённые коммиты даже остаются доступны по хэшу. Помогает только полный снос репозитория.

    А вообще github не подходит для приватной разработки. И мне кажется, что и gitlab тоже не стоит наружу выставлять.

     
     
  • 2.22, Аноним (22), 13:18, 25/07/2024 [^] [^^] [^^^] [ответить]  
  • +1 +/
    >Помогает только полный снос репозитория.

    В том то и дело, что даже он не помогает.

     

  • 1.19, Аноним (22), 13:04, 25/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    Я только что проверил: заменённые коммиты многолетней давности - на месте. Если бы гитхаб чистил объекты без ссылок, то такого бы не было.
     
  • 1.27, Аноним (27), 21:25, 25/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +2 +/
    > Компания удалила репозиторий через который была утечка, но ключи по-прежнему остались доступны для извлечения через обращения по хэшу коммита в репозиториях с форками.

    Если колбоса из бутерброда упала на пол и её успели поднять за 5 сек, то не считается что упала. Можно просто отряхнуть и вложить назад в бутер .. и подать клиенту на стол.

     
  • 1.29, Аноним (29), 23:15, 25/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +/
    А еще можно было просто склонировать репозиторий до того как удалили.. и да, там оно волшебным образом не удалится, когда у оригинальном репозитории чтото там удалят.

    ахтунг, я открыл новую уязвимость!

     
     
  • 2.30, Микхаэль (?), 00:27, 26/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    После удаления в апстриме, вас вежливо попросят следовать тому же принципу. Если вы не пойдёте на встречу, то вас будут судить. Только уже тролли))
     

  • 1.31, Аноним (31), 00:40, 26/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Уязвимость с выложенными паролями бредовая какая-то.  Если нечаяно выложили логины/пароли, то их надо срочно менять, а не надеяться, что никто прочитать не успел.

    Остальные "уязвимости" тоже уязвимости только в чьем-то воображении, кроме пожалуй доступа к приватной части репозитория, которая осталась закрытой после раскрытия другой части.

     
     
  • 2.33, Аноним (33), 16:42, 26/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    >Если нечаяно выложили логины/пароли, то их надо срочно менять, а не надеяться, что никто прочитать не успел.

    А если кто-то в репозиторий по ошибке закоммитил секретную документацию, полученную от партнёров? Ждать, пока партнёр засудит, или всё же снести?

     
  • 2.38, Электрон (?), 21:28, 27/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Очень даже реальный случай: с частного репозитория лилась потоком метаинформация типа "новый коммит + заголовок" на радость публике в канал Discord. В один прекрасный день один из коммитов был тестово-пентестовым. "Немного" раскрыл удавшуюся шалость в отношении auth сервера одной из дочерних компаний Microsoft. На самом деле много раскрыл, правда кипишь поднялся не по этой причине.

    А тут же получается бывший публичный проект + непубличный форк + коммит = раскрытие информации. Коммиты либо 6-12 хексов запечатываются как build id или, как они показали, перебором. А все почему? Не проверяется принадлежность коммита к репозиторию ему создавшему, потому что объектное хранилище значит одно, а их ПО не утруждает себя ведением состояния и прав, и проверкой доступа.

     

  • 1.32, Аноним (32), 12:34, 26/07/2024 [ответить] [﹢﹢﹢] [ · · · ]  
  • +1 +/
    Вы сами выложили данные на сервера гита, а теперь беспокоитесь, что они могу "утечь"?
    Лол.
    Ну так все проблемы гита из за - "би дезигн".
    Зачем они эти обязательные форки оригинального репа, перед моим коммитом внедрили?
    Теперь пожинают плоды.
     
     
  • 2.34, Аноним (33), 16:44, 26/07/2024 [^] [^^] [^^^] [ответить]  
  • +/
    Для оптимизации хранения же. Ты ещё скажи спасибо, что там глобальной дедупликации нет, что все репозитории не являются implicitly форком одного и того же репозитория и что любой файл нельзя получить просто по хэшу.
     

     Добавить комментарий
    Имя:
    E-Mail:
    Текст:



    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру