Ang bug sa aming secret scanner na hindi nahanap ng mga canary
Shipping
Bago i-zip ang anumang kit na aming ibinebenta, isang gate ang nag-scan dito para sa mga aktwal na halaga ng aming sariling secrets. Ang bawat scan ay nagsisimula sa paglalagay ng mga canary, isa sa bawat uri, at tumatanggi na tumakbo maliban kung mahuli nito ang lahat ng ito. Palaging nahuhuli nito ang mga ito. May bug pa rin ito.
Paano binabasa ng gate ang mga secrets
Hindi lamang hinahanap ng gate ang mga bagay na hugis-key. Binabasa nito ang mga file kung saan nakatira ang aming secrets (env files, JSON configs, key files), kinukuha ang bawat halaga na ang pangalan ay nagsasabing ito ay secret, at pagkatapos ay hinahanap nito sa aming ipapadala ang eksaktong mga halagang iyon, gaya ng nakasulat at base64-encoded.
Ang bug
Para sa isang linya tulad nito:
DB_PASSWORD='Tr0ub4dor-and-3' # pinalitan noong Mayo
tinanggal ng reader ang mga quote sa paligid lamang kung ang halaga ay nagsisimula at nagtatapos sa isang quote character. May komento pagkatapos ng halaga, ang linya ay nagtatapos sa isang letra, kaya nanatili ang mga quote. Ang komento ay tinanggal pagkatapos, at ipinagpatuloy ng gate ang paghahanap para sa 'Tr0ub4dor-and-3', kasama ang mga quote. Ang isang kit na naglalaman ng password na walang mga quote na iyon ay dapat na nakapasa.
Bakit hindi napansin ng mga canary
Ang isang canary ay sumusubok ng isang net: maglagay ng halaga na alam na ng scanner, tiyakin na ito ay mahuli. Ang aming mga halaga ng canary ay ibinigay nang direkta sa scanner, kaya hindi sila dumaan sa code na nagbabasa ng config line. Ang bawat net ay nasubok, ngunit hindi ang parser na nasa harap ng mga ito.
Paano namin ito natuklasan
Ginagawa naming produkto ang gate, at sumulat kami ng test na nagpapakain dito ng config file sa mga hugis na aktwal na sinusulat ng mga tao: export, quotes, trailing comments. Nabigo ang test sa linya na may quote at komento. Ang fix ay binabasa ang quoted value hanggang sa closing quote nito at pinapansin ang anumang sumusunod dito.
May kahalagahan ba ito?
Tiningnan namin bago baguhin ang anumang bagay. Sa aming build machine, binabasa ng gate ang 133 secret values mula sa 59 files na ibinigay sa ito, at sa pangalawang machine ay 499; wala sa mga ito ang may hugis na iyon. Walang nagbabago sa mga naunang desisyon: ang bawat kit na aming inilabas ay na-scan para sa mga parehong halaga na isuscan nito ngayon. Inayos namin ang gate sa lahat ng tatlong machine kahit na ganoon.
Ang takeaway
Kung kinukuha ng scanner ang hinahanap nito, subukan ang pagkuha gamit ang makatotohanang input, hindi lamang ang paghahanap gamit ang mga inilagay na halaga. Pinatutunayan ng canary na gumagana ang lambat; hindi nito sinasabi kung nararating ba talaga nito ang tamang isda. Saklaw na ng mga test ng Secret Gate ang pareho, at bago ito ilabas, sinigurado namin na binabasa nito ang eksaktong 133 halaga na katulad ng build gate namin.