ReDOS -haavoittuvuus

ReDOS on ohjelmistossa oleva bugi, eli haavoittuvuus, joka liittyy regex -parsintaan. Läheisen nimisukulaisuuden vuoksi ReDOS saattaa mennä sekaisin DDoS -hyökkäyksen kanssa. Nämä kaksi hyökkäystä ovat käytännössä täysin erilaisia.

ReDOS = softabugi, DDoS = verkkohyökkäys

ReDOS liittyy ohjelmistokirjaston algoritmivalintaan, tai huonoon koodin laatuun; kun taas DDoS:ssa ensin hallitaan useita tuhansia tai satojatuhansia Internetiin kytkettyjä zombie-koneita, joiden käsketään yhteisesti häiritä TCP/IP paketeilla haluttua kohdetta.

ReDOSia käyttämällä hyökkääjä voi

  • hyydyttää serverin, eli palvelimella ajettava (esim. PHP-kielinen) backend ohjelmisto jää jumiin koodissa, joka ottaa vastaan hyökkääjältä syötettä
  • tyypillinen esimerkki: HTML-form sisältää syötekentän, joka validoidaan ReDOS:n mahdollistavalla “bugisella” koodilla
  • seurauksena serveri kuormittuu tuhansia kertoja normaalia suuremmin
  • muut palvelimeen yhteyttä yrittävät asiakkaat jäävät nuolemaan näppejä, tai pahimmillana serverin ohjelmisto kaatuu kokonaan

‘regex’ (toisinaan myös lyhyesti vain ‘re’) on merkkijonojen vertailuja kuvaava pieni kielioppi. Regexissä esiintyy sekä yksittäisiä erikoismerkkejä, että pieniä algebraa muistuttavia rakenteita, joilla voidaan määritellä merkkijonojen vertailu- ja matchaus-sääntöjä:

  • “*” (tähti) on lukumäärämäärite: tarkoittaa “kuinka monta tahansa kertaa”, myös mukaanlukien erikoistapauksen “ei yhtään kertaa”.
  • . (piste) täsmää tasan yhden merkin
  • ? (kysymysmerkki)
  • muutamia muita rakenteita

ReDOS -haavoittuvuus pyrkii lamauttamaan regex-parserin…

  • syötteellä, jonka tulkitsemalla regex-parseri joutuu ikuiseen silmukkaan, tai
  • syötteellä, joka on tunnetusti järkyttävän hidas suorittaa regex-parserissa

ReDOS-hyökkäykset ovat yleisiä, koska hyvin monissa käytännön websovelluksissa käytetään regex-lausekkeita. Ne menevät usein jopa aivan huomaamatta sovelluksen osaksi, “harmittomissa” paikoissa, kuten:

  • reittien (routes) parsimisessa
  • GET:n parametrien irrottamisessa (extraction)
  • käyttäjältä tulevan syötteen validoinnissa (kentät lomakkeissa, yms.)
  • IP-osoitteiden filtteröinnissä (“geofencing”-toiminnot, sisällön jakaminen eri lailla eri maantieteellisille alueille)
  • yms

Regex-haavoittuvuuden yleisyys on siis suuri; melkeinpä järjestäen softa kuin softa sisältää jossain päin näitä koodinpätkiä.

Lieventävänä tekijänä on se, että ReDOS:n mahdollistavia bugityyppejä ei pitäisi olla aivan järjettömän montaa erilaista, ja itse säännöllisten kielioppien (jollainen regex on) teoria on varsin pitkään tutkittu alue tietotekniikassa.

Ongelmalliseksi käytännössä ReDOS:n tekee se, että kuten aina, softakirjaston bugi usein piilee niin kauan kunnes riittävän suuren huomion saava tapaus nousee esille uutisotsikoihin.

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.

%d bloggers like this: