Съдържание

/github-leaked-keys-still-working/github-leaked-keys-still-working.png

Пълен курс по етично хакерство от нула до експерт

Хаквайте като „черни шапки“. Тестване за проникване, Kali Linux, хакерство на WiFi и уеб сайтове, както и хакерският начин на мислене зад всичко това.

543 699 ключа и пароли са престоявали в публичен код в GitHub и все още са работили, когато изследователите са ги тествали през юли 2026 г. Най-старият датира от 2009 г. 51,8 процента са били от типове, които защитата по подразбиране на GitHub не блокира.

Изследователи от Truffle Security са преминали през 224 милиона публични хранилища в GitHub. За всеки API ключ, облачен ключ, парола за база данни и токен, открити в кода, те са попитали услугата, която го е издала, дали все още им осигурява достъп. Те са направили това на 27 и 28 юли 2026 г. и 543 699 от тях все още са работили.

API ключ или низ за връзка с база данни представлява идентификационна данна за вход. Това е дълъг ред от знаци, който дадена програма изпраща към услуга, за да удостовери, че има право на достъп, и всеки, който разполага с този ред, получава достъп. Поставете го във файл и качете файла в публично хранилище и този вход става публичен. По думите на изследователите: „Изтекъл ключ, който все още се удостоверява, е достъп.“

Медианният ключ е престоял на публично място поне 784 дни. Една четвърт от тях са били на повече от четири години, а един на десет е бил на повече от 6,3 години. Най-старият за последно е бил модифициран на 13 юни 2009 г. Това е парола за вход в база данни в конфигурационен файл на Erlang уеб сървър и все още е работила през юли 2026 г., 17 години по-късно.

Следващият по ред е бил FTP вход в C изходния код на GPS логер от септември 2009 г. Този ключ е бил копиран в 62 хранилища. Разработчик прави разклонение (fork) на проект или копира папка в собственото си хранилище и паролата се пренася заедно с кода. Изследователите са броили всеки ключ само веднъж, независимо колко често се е появявал, а 543 699-те ключа са се намирали на общо 1 103 438 места.

И тази цифра е долната граница. Изследователите са сканирали The Stack v3 – снимка на 224 милиона публични хранилища, събрана от Hugging Face за обучение на AI модели до 7 август 2025 г. Тя съдържа клона по подразбиране на всяко хранилище, основния клон, както е изглеждал на този ден, без историята зад него. Както се посочва в доклада: „Всичко, което е било принудително премахнато чрез force push, преместено в клон, който не е по подразбиране, или е било качено (commit) и след това отменено преди август 2025 г., е невидимо за този метод.“

Ако някога сте премахнали ключ от даден файл и сте продължили работата си, той все още е във вашата история. Git пази по-ранните версии на вашите файлове, така че комитът, съдържащ ключа, все още е там, след като сте премахнали реда в нов комит.

Собствената документация на GitHub отива и по-далеч. Дори след като презапишете историята, старите комити все още могат да бъдат достигнати в клонинги и разклонения (forks), чрез заявки за изтегляне (pull requests), които сочат към тях, както и в самия GitHub чрез идентификатора на комита, в така наречените от GitHub кеширани изгледи (cached views). Първата инструкция на платформата е да замените ключа: „като първа стъпка трябва да анулирате и/или да подновите тази тайна.“

Какво все още е осигурило достъп на изследователите, по типове:

  • → 69 041 ключа за сервизни акаунти в Google Cloud
  • → 51 067 идентификационни данни за бази данни MongoDB
  • → 33 343 Google API ключа
  • → 11 465 идентификационни данни за бази данни Postgres, 88 процента от откритите
  • → 9 189 ключа за имейл услугата SendGrid от общо 22 800
  • → 6 819 AWS ключа за достъп от общо 82 411

При някои услуги почти нищо не е оцеляло. От 73 048 токена на GitHub в публичен код, 260 все още са работили. От 30 437 токена на Hugging Face – 15. На този background се откроява Google Cloud с 69 041 работещи ключа от общо 126 963.

Докладът обяснява разликата с едно изречение: „Засичането без анулиране оставя ключа работещ.“ GitHub сканира публичния код за токени от услуги в своята партньорска програма и изпраща намереното на съответната услуга. Какво се случва след това зависи от услугата. Когато услугата изключи ключа, той спира да работи. Когато не го направи, ключът може да продължи да работи с години, както е станало с AWS ключ от ноември 2009 г.

Google наистина изключва ключове. От 16 юни 2024 г. компанията деактивира ключове за сервизни акаунти – ключовете, които дадена програма използва за вход в Google Cloud без човешка намеса – когато ги открие в публични хранилища в GitHub и GitLab. Това е включено по подразбиране, включително за съществуващи клиенти, които не са направили друг избор.

Това е настройка и дадена компания може да я промени на WAIT_FOR_ABUSE, което оставя изтеклия ключ активен, докато не бъде използван по начин, който вреди на платформата, като дори тогава Google само е възможно да го изключи. И все пак 54 процента от тези ключове в доклада са работили през юли 2026 г.

Две неща в собствената документация на Google съвпадат с това. Ключове, които са изтекли между 16 януари и 16 юни 2024 г., преди настройката да съществува, никога не са били деактивирани автоматично. Освен това Google пише, че „не гарантира, че ще засече открити ключове.“ За по-нови изтичания картината е различна: от ключовете, изтекли през 2025 г., 8 процента все още са работили.

AWS реагира бързо и въпреки това оставя ключа активен. В тест, публикуван от изследователи от Unit 42 през септември 2026 г., ключ, появил се в публично хранилище в GitHub, е получил политика за карантина в рамките на 10 секунди. Тази политика блокира определени рискови действия. Те пишат: „AWS нарочно отказва конкретни действия, вместо напълно да деактивира компрометирания ключ за достъп или потребителска парола.“ Самият ключ остава активен.

GitHub все пак създаде нещо, за да спре новите изтичания. От 29 февруари 2024 г. защитата при качване (push protection) е включена по подразбиране за качвания в публични хранилища: когато качвате ключ, който платформата разпознава по неговия модел, качването се блокира. Все пак можете да го качите, „ако прецените, че тайната е безопасна“. Където е приложима, тя работи. В хода на внедряването типовете, които тя блокира, са намалели с 53 процента, а останалите типове – с 7 процента.

Въпреки това 199 843 от работещите ключове са изтекли, след като GitHub е включил тази защита. И 51,8 процента от всички работещи ключове са от тип, който публично хранилище приема по подразбиране, като низовете за връзка с бази данни и Google API ключовете са в тази група.

Maps ключ и Gemini ключ започват с едни и същи знаци – AIzaSy. Първият е предназначен да се намира в уеб страница, за да може картата да се зареди. Вторият отваря достъп до изкуствения интелект на Google и е, както пишат изследователите, „платена идентификационна данна, свързана с крайна точка на модел“, така че сметката отива при собственика, независимо кой използва ключа. „Един модел за търсене не може да ги разграничи, затова нищо не се блокира.“

През февруари 2026 г. изследователите показаха, че това може да бъде един и същ ключ: когато включите Gemini API в даден Google Cloud проект, съществуващите ключове в този проект могат тихомълком да получат достъп до него. Те откриха 2 863 от тези ключове в публични уебсайтове, включително и в тези на Google. В кода в GitHub изследователите откриха 31 374 работещи Gemini ключа, със средна дата на изтичане на информацията февруари 2025 г. – една година след като защитата при изпращане (push protection) беше включена.

Всички 543 699 ключа са налични и за изтегляне. Наборът от данни се предлага в две версии. В тази, предназначена за обучение, модел за откриване е заменил имейли, ключове, имена, пароли и IP адреси с заместващи символи (placeholders). Пълната версия от 224 милиона хранилища се намира в публичен контейнер за съхранение (storage bucket), а на нейната страница е посочено, че файловете „не са редактирани за лични данни (PII). Те са със суровото съдържание на файловете, така както са извлечени от GitHub, и могат да съдържат имейли, идентификационни данни, API ключове и други лични данни, които са били публични в GitHub.“ PII означава лична информация.

Изследователите са откривали това в данни за обучение на изкуствен интелект и преди. През юни 2026 г. те сканираха 7,6 петабайта данни за обучение в Hugging Face и откриха 221 303 работещи ключа в 6 003 набора от данни.

Ако някога сте качвали код, съдържащ ключ в него:

  • → Първо деактивирайте ключа или го заменете с нов (отмяна или ротация), и едва след това изчистете историята. Съветът на изследователите е да третирате всеки качен ключ като компрометиран в момента, в който бъде публикуван, независимо дали нещо е сигнализирало за него или не.
  • → Сканирайте собствената си история, вместо да се доверявате на блокирането по време на качване (push time). Защитата при качване не беше включена по подразбиране за нищо, което сте качили преди февруари 2024 г.
  • → Използвайте ключове с срок на валидност. В доклада се казва, че „повечето от това, което открихме, щеше да остарее безвредно, ако му беше зададен срок на експлоатация“.
  • → В Google Cloud проверете дали политиката на организацията iam.serviceAccountKeyExposureResponse е настроена на DISABLE_KEY.
  • → Търсете вашите хранилища на страницата „Am I in The Stack?“ и поискайте премахване оттам. Хранилищата, които се откажат, се изключват от следващото издание. Ключ в копие, което вече е изтеглено, все пак трябва да бъде заменен.
  • → Стартирайте TruffleHog върху вашите собствени хранилища. Той е безплатен и с отворен код, разпознава повече от 800 типа тайни, а с --results=verified показва само ключовете, за които е потвърдено, че все още работят чрез тестване спрямо услугата.

За изтрити и скрити комити в GitHub, TruffleHog има експериментален режим. Това е алфа функция и откриването на комитите отнема между 20 минути и няколко часа:

В моя курс съхранявате API ключове в променливи на средата, извън вашия код, и се обучавате да откривате публично достъпни конфигурационни файлове с Google dorks. Моят пълен курс по етично хакерство от нулата до експерт ви води стъпка по стъпка: разузнаване, сканиране, експлоатация и анализ на трафика, практически, от първия ви ден без опит с Linux или хакерство.

→ Присъединете се към моя пълен курс по етично хакерство

Хакерството не е хоби, а начин на живот.

Truffle Security | Google Cloud | Hugging Face