Chyba v našom tajnom skeneri, ktorú canaries nenašli
Doručenie
Predtým, než zabalíme do archívu akýkoľvek balík, ktorý predávame, skontroluje ho brána kvôli skutočným hodnotám našich vlastných tajných kľúčov. Každá kontrola začína vysadením kanárikov, po jednom z každého druhu, a odmietne bežať, pokiaľ nezachytí všetky. Vždy ich zachytila. Stále však mala chybu.
Ako brána číta tajné kľúče
Brána nehľadá len veci tvarované ako kľúče. Číta súbory, v ktorých sa nachádzajú naše tajomstvá (súbory env, konfigurácie JSON, kľúčové súbory), vezme každú hodnotu, ktorej názov hovorí, že je tajná, a potom v tom, čo chystáme vydať, vyhľadá presne tieto hodnoty, a to v podobe, v akej sú zapísané, aj v kódovaní base64.
Chyba
Pre linku ako je táto:
DB_PASSWORD='Tr0ub4dor-and-3' # rotované v máji
čítačka odstránila obklopujúce úvodzovky len vtedy, ak hodnota začínala aj končila úvodzovkou. S komentárom za hodnotou riadok končí písmenom, takže úvodzovky zostali. Komentár bol následne orezaný a kontrola pokračovala v hľadaní 'Tr0ub4dor-and-3' vrátane úvodzoviek. Balík obsahujúci heslo bez týchto úvodzoviek by prešiel.
Prečo si kanárik nikdy nevšimol
Canary testuje sieť: vložte hodnotu, ktorú skener už pozná, a overte, či ju nájde. Naše canary hodnoty boli odovzdané priamo skeneru, takže neprešli kódom, ktorý číta riadok konfigurácie. Každá sieť bola otestovaná, no parser pred nimi nie.
Ako sme to našli
Premieňali sme bránu na samostatný produkt a napísali sme test, ktorý jej podával konfiguračný súbor v tvare, v akom ho ľudia skutočne píšu: export, úvodzovky, komentáre na konci riadka. Test zlyhal na riadku s komentárom v úvodzovkách. Oprava načíta hodnotu v úvodzovkách po jej uzavretú úvodzovku a ignoruje všetko, čo nasleduje.
Záležalo na tom?
Skontrolovali sme to ešte pred tým, než sme niečo zmenili. Na našom build stroji brána načíta 133 tajných hodnôt z 59 zadaných súborov a na druhom stroji 499; žiadna z nich nemala tento tvar. Žiadny skorší verdikt sa nemení: každý balík, ktorý sme vydali, bol skontrolovaný na rovnaké hodnoty, na aké sa bude kontrolovať teraz. Napriek tomu sme bránu opravili na všetkých troch strojoch.
Zhrnutie
Ak extraktor získa to, čo hľadá, otestujte extrakciu na realistickom vstupe, nielen vyhľadávanie s predpripravenými hodnotami. Kanársky test dokazuje, že sieť funguje, ale nehovorí nič o tom, či sa do nej dostanú správne ryby. Testy balíka Secret Gate teraz pokrývajú obe situácie a pred jeho vydaním sme overili, že načíta presne tých istých 133 hodnôt ako náš build gate.