Chyba ve našem skeneru tajných údajů, kterou canaries nenašly
Doručení
Než zabalíme jakýkoli balíček, který prodáváme, brána ho projde a vyhledá skutečné hodnoty našich vlastních tajných údajů. Každé skenování začíná vysazením canaries, jedné každého druhu, a odmítne běžet, pokud je všechny nechytí. Vždy je chytila. Přesto měla chybu.
Jak brána čte tajné údaje
Brána nehledá jen věci ve tvaru klíčů. Čte soubory, kde naše tajné údaje žijí (env soubory, JSON konfigurace, soubory s klíči), vezme každou hodnotu, jejíž název říká, že je tajná, a pak hledá v tom, co chystáme vydat, přesně tyto hodnoty, jak jsou zapsány a v base64 kódování.
Chyba
Pro řádek jako tento:
DB_PASSWORD='Tr0ub4dor-and-3' # rotováno v květnu
čtenář odstranil obklopující uvozovky jen tehdy, když hodnota začínala i končila znakem uvozovky. S komentářem za hodnotou řádek končí písmenem, takže uvozovky zůstaly. Komentář byl pak odříznut a brána pokračovala ve hledání 'Tr0ub4dor-and-3', včetně uvozovek. Balíček obsahující heslo bez těchto uvozovek by prošel.
Proč si canaries nikdy nevšimly
Canary testuje síť: vysaďte hodnotu, kterou skener už zná, a ověřte, že je nalezena. Naše hodnoty canaries byly předány přímo skeneru, takže nikdy neprošly kódem, který čte řádek konfigurace. Každá síť byla otestována, ale parser před nimi ne.
Jak jsme to našli
Přeměňovali jsme bránu na samostatný produkt a napsali test, který jí dodal konfigurační soubor ve tvarech, které lidé skutečně píší: export, uvozovky, koncové komentáře. Test selhal na řádku s uvozovkami a komentářem. Oprava čte hodnotu v uvozovkách až po její uzavírací uvozovku a ignoruje cokoliv, co následuje.
Záleželo na tom?
Zkontrolovali jsme to před jakoukoli změnou. Na našem build stroji brána načte 133 tajných hodnot z 59 souborů, které jí jsou zadány, a na druhém stroji 499; žádná neměla tento tvar. Žádný předchozí verdikt se nemění: každý balíček, který jsme vydali, byl skenován pro stejné hodnoty, pro které by byl skenován nyní. Opravili jsme bránu na všech třech strojích i tak.
Shrnutí
Pokud skener extrahuje to, co hledá, otestujte extrakci na realistickém vstupu, nikoli jen hledání s předem připravenými hodnotami. Kanárský ptáček dokazuje, že síť funguje; nic ale neříká o tom, zda se k ní dostanou správné ryby. Testy Secret Gate nyní pokrývají obojí a před vydáním jsme ověřili, že čte přesně stejných 133 hodnot jako náš build gate.