Jou wagwoord-herstelvorm is 'n gratis e-poskanon
Die wagwoord-herstelvorm is waarskynlik die vervelendste eindpunt wat jy besit. Dit is ook die enigste een wat 'n aanvaller op enigiemand kan rig. Ons s'n het 'n ruk lank geen per-e-pos rate limit gehad nie, en die rede waarom dit saak maak is nie die rede wat jy sou raai nie.
Die refleks, wanneer jy hoor "ongeverifieerde eindpunt, geen rate limit," is om aan brute force te dink. Maar daar is niks om te brute-force op 'n herstelversoek nie. Jy raai nie 'n wagwoord nie. Jy dien 'n e-posadres in en die stelsel stuur 'n skakel. Om daarop te hamer kry jou nie in 'n rekening in nie. So wie kom te kort?
Die slagoffer is 'n derde party. Tik iemand anders se adres, [email protected], druk stuur, herhaal. Elke versoek stuur 'n regte e-pos na 'n regte inkassie wat jy nie beheer nie. Jy het ons herstelvorm opgekommandeer tot 'n posbom gerig op iemand wat nooit vir enigiets aangemeld het nie. En omdat die pos van ons af kom, land die skade op twee plekke tegelyk. Die slagoffer se inkassie loop vol. En ons stuurder-reputasie kry die klap, want 'n vloed ongewenste pos vanaf ons domein is presies waarna posbus-verskaffers oplet. Genoeg daarvan en ons wettige pos, verifikasieskakels, werklike wagwoord-herstellings, begin in strooipos beland vir elke regte kliënt wat ons het. 'n Ongeverifieerde eindpunt, met geen geloofsbriewe en geen koste vir die aanvaller nie, verswak 'n hulpbron wat al ons gebruikers deel.
Dus rate-limit jy dit. Per e-posadres, sodat een teiken nie oorstroom kan word nie. Maklik. Behalwe dat die voor die hand liggende implementering stilweg 'n ander gat oopmaak.
As jy die limiet net toepas, of die werk net doen, wanneer die adres werklik 'n rekening het, dan gedra die eindpunt hom anders vir regte rekeninge as vir opgemaakte enes. 'n Aanvaller wat daardie verskil kan sien, in die respons, die statuskode, of net die tydsberekening, het nou 'n oracle vir watter e-posadresse by jou geregistreer is. Herstelvorms is 'n klassieke rekening-enumerasie-lek om presies hierdie rede: die naïewe oplossing vir die posbom skep die enumerasie-fout.
Die werklike oplossing moet albei dinge tegelyk doen, en die twee helftes is apart. Eerstens, rate-limit op die genormaliseerde e-posadres ongeag of 'n rekening bestaan. Die limiet-sleutel is die adres self, in kleinletters en gesnoei sodat Victim@ en victim@ een emmer deel, en die teller word toegepas voordat jy enigiets opgesoek het. Daardie teller moet in 'n duursame, gedeelde stoor leef, nie in een proses se geheue nie, anders verdamp dit met 'n herbegin en doen niks oor veelvuldige instansies heen nie. Tweedens, reageer identies in elke geval: dieselfde status, dieselfde "as daardie adres 'n rekening het, het ons 'n skakel gestuur"-boodskap, dieselfde tydsberekening-vorm, of die adres een van joune is of nie. Jy stuur steeds net werklik pos wanneer daar 'n rekening agter is. Maar niks wat 'n buitestaander kan waarneem verander op grond van daardie geheim nie. Die rate limit beskerm die derde party; die konstante respons beskerm die feit van wie 'n rekening het.
Die algemene les strek verby wagwoord-herstellings. Enige ongeverifieerde eindpunt wat 'n newe-effek in die regte wêreld veroorsaak, om 'n e-pos te stuur, om 'n SMS te stuur, om 'n webhook aan te roep, is nie bloot deel van jou aanvalsoppervlak nie. Dit is 'n wapen gerig op wie ook al aan die ontvangkant is, en die rekening om dit af te vuur land op jou stuurder-reputasie, nie die aanvaller s'n nie. Rate-limit volgens die ding waarop opgetree word, wat die ontvanger is, nie die oproeper nie. En doen dit sonder om toe te laat dat die teenwoordigheid of afwesigheid van geheime toestand verander wat 'n waarnemer sien.
Die wagwoord-herstelvorm voel soos loodgietery. Dit is die een stuk loodgietery wat met graagte enigiemand in die wêreld op bevel sal natspuit. Meet dit dienooreenkomstig.
Om 'n ongeverifieerde newe-effek-eindpunt te meet sonder om te lek wie 'n rekening het, is peuteriger as wat dit lyk. Authagonal lewer die herstelvloei reeds rate-limited en enumerasie-veilig, sodat jou stuurder-reputasie nooit een curl-lus van verwoesting af is nie.