Kritická zraniteľnosť v aplikácii Moje eZdravie - únik databázy pacientov testovaných na COVID-19 - Nethemba

BLOG

Kritická zraniteľnosť v aplikácii Moje eZdravie – únik databázy pacientov testovaných na COVID-19

2020-09-17 02:31 Peter Sooky

V aplikácii Moje eZdravie sme identifikovali triviálnu zraniteľnosť, ktorá nám umožnila získať osobné informácie o viac ako 390 000 pacientoch, ktorí boli na Slovensku testovaní na COVID-19 (na demonštráciu sa nám podarilo získať osobné informácie o viac ako 130 000 pacientoch, z toho viac ako 1600 COVID-19 pozitívnych).

Medzi získané osobné informácie každého pacienta patrí meno, priezvisko, rodné číslo, dátum narodenia, pohlavie, mobilné číslo, miesto pobytu, informácie o klinických príznakoch (pneumónia, teplota, kašeľ, malátnosť, nádcha, bolesť hlavy, bolesť kĺbov a svalov), kód vzorky, dátum presného odberu, laboratórium, ktoré daný test vykonalo, lekár žiadateľ, číslo protokolu, dátum prijatia a vyšetrenia, druhy testu a samozrejme jeho výsledok.

Popis zraniteľnosti

Zneužitie uvedenej zraniteľnosti vedúce k úniku viac ako štvrť milióna osobných údajov a výsledkov COVID-19 testov slovenských občanoch bolo možné vďaka nasledujúcim faktorom:

  • Únik formátu API volaní verejným vyhľadávačom (ktoré ho zaindexovali)
  • Umožnenie neautorizovaného prístupu k samotným volaniam API, ktoré umožňovalo prístup k citlivým informáciám a to bez akejkoľvek autentifikácie
  • Možnosť získať informácie o všetkých pacientoch jednoduchou enumeráciou číselného identifikátora
  • Absencia akýchkoľvek mechanizmov, ktoré by znemožňovali masívne sťahovanie uvedených údajov
  • Všetky dáta boli v nešifrovanej, teda úplne nezabezpečenej forme (v „plaintext“)

Získanie databázy pacientov testovaných na COVID-19

Útočník dokázal k uvedeným údajom všetkých pacientov pristúpiť bez akejkoľvek autentifikácie a tiež bez špeciálnych technických znalostí. Skript na získanie údajov o všetkých pacientov v XML formáte je úplne triviálny:

#!/bin/bash
for (( i=8966; i < 391000; i++ )); do
wget https://mojeezdravie.nczisk.sk/api/cntnt.dnld.php/$i
done

Na získanie celej databázy testovaných pacientov nebol teda potrebný žiadny špeciálny exploit.

Informácie o dátach a potenciálne zneužitie

  • Stiahli sme dostatočne veľkú vzorku náhodných dát a analyzovali, že ide o skutočne unikátne záznamy
  • Na základe numerických identifikátorov sme odhalili minimálne 391250 validných záznamov (podľa https://korona.gov.sk/ je ich momentálne 393486)
  • Identifikovali sme úplne čerstvé záznamy o testovaných pacientoch (pár hodín predtým ako uvedená zraniteľnosť bola opravená)
  • Prvý záznam mal identifikátor 8966
  • Uniknuté informácie ako meno, priezvisko, rodné číslo, dátum narodenia, pohlavie, mobilné číslo, miesto pobytu či email dokážu byť zneužité na sofistikované cielené útoky sociálneho inžinierstva (phishing, vishing a iné). Využitím ďalších dostupných informácií ako výsledok testu, informácia o zdravotnej poisťovni či názvu laboratória, ktoré vykonalo testy, je možné realizovať sofistikované cielené „scam“ útoky.

Zodpovedné zverejnenie zraniteľnosti

Vzhľadom k tomu, že išlo o veľmi citlivé dáta veľkej časti slovenskej populácie, uvedenú zraniteľnosť sme nahlásili oficiálnym kanálom CSIRT 13.9 o 23:30. K oprave uvedenej zraniteľnosti došlo 16.9 zhruba medzi 16:30-16:50. Až po oprave tejto zraniteľnosti sme sa rozhodli uvedenú zraniteľnosť publikovať.

Záver

Je potrebné sa zamyslieť:

  • Prečo tak citlivé informácie o všetkých COVID-19 testovaných pacientoch musia boli vôbec umiestnené na verejnom Internete?
  • Prečo neboli nijako anonymizované alebo šifrované?
  • Prečo neboli nijako chránené autentifikáciou?
  • Prečo neboli zničené informácie o niekoľko mesiacoch starých záznamoch pacientov?
  • Ak štát nedokáže ochrániť osobné informácie o všetkých testovaných ľuďoch na COVID-19, prečo si myslíme, že dokáže ochrániť citlivé lokalizačné údaje, ktoré dokáže získať od mobilných operátorov?