ReDOS -haavoittuvuus

Spread the love
Reading Time: 2 minutes

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.

Facebook Comments

Published by jukkasoft

Hi! A bit updated description. Code enthusiasta, technology optimist, but also a realist. In my blog I wrote 80% of technology related articles, mostly in English and Finnish. I like to envision and ponder about things, how life could be, what we are doing wrong today, and so on. "Invented" a facebook -like system in 2000, as a short product pamphlet. Haven't yet realized the 20+ ideas that might have become big things. Maybe learning this skill one of these days!

Leave a Reply

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

%d bloggers like this: