Feilen i vår hemmelighetsskanner som kanarifuglene ikke fant

Levering

Før noe kit vi selger, pakkes inn, sjekker en port for de faktiske verdiene av våre egne hemmeligheter. Hver skanning starter med å plante kanarifugler, én av hver type, og nekte å kjøre med mindre den fanger alle. Den fanget dem alltid. Den hadde likevel en feil.

Slik leser porten hemmeligheter

Porten ser ikke bare etter ting som er formet som nøkler. Den leser filene der hemmelighetene våre ligger (env-filer, JSON-konfigurasjoner, nøkkelfiler), tar alle verdier der navnet sier at de er hemmelige, og søker deretter i det vi er i ferd med å sende ut etter disse nøyaktige verdiene, slik de er skrevet og base64-kodet.

Feilen

For en linje som denne:

DB_PASSWORD='Tr0ub4dor-and-3'  # rotert i mai

strippet leseren de omgivende anførselstegnene bare når verdien både startet og sluttet med et anførselstegn. Med en kommentar etter verdien, slutter linjen på en bokstav, så anførselstegnene ble værende. Kommentaren ble kuttet bort deretter, og porten fortsatte å søke etter 'Tr0ub4dor-and-3', inkludert anførselstegn. Et kit som inneholdt passordet uten disse anførselstegnene, ville ha bestått.

Hvorfor kanarifuglene aldri merket det

En kanarifugl tester et nettverk: plant en verdi skanneren allerede kjenner, sjekk at den blir funnet. Våre kanarifugl-verdier ble levert direkte til skanneren, så de gikk aldri gjennom koden som leser en konfigurasjonslinje. Hvert nettverk ble testet, men parseren foran dem ble ikke det.

Hvordan vi fant den

Vi var i ferd med å gjøre porten til et produkt i sin egen right, og skrev en test som matet den en konfigurasjonsfil i de formene folk faktisk skriver: export, anførselstegn, avsluttende kommentarer. Testen feilet på den anførte linjen med en kommentar. Fiksen leser en anført verdi opp til det avsluttende anførselstegnet og ignorerer hva som følger etter.

Betydde det noe?

Vi sjekket før vi endret noe. På bygge-maskinen vår leser porten 133 hemmelige verdier fra de 59 filene den får, og på en annen maskin 499; ikke én hadde den formen. Ingen tidligere dommer endres: hvert kit vi har utgitt, ble skannet etter de samme verdiene som det ville bli skannet etter nå. Vi fikset porten på alle tre maskinene likevel.

Konklusjonen

Hvis en skanner henter ut det den søker etter, test uttrekket med realistiske data, ikke bare søket med innplantede verdier. En kanari viser at nettet fungerer, men sier ingenting om de riktige fiskene faktisk havner i det. Testene av Secret Gate dekker nå begge deler, og før utgivelsen sjekket vi at den leser nøyaktig de samme 133 verdiene som vår byggegate.

Oppdatert: