Naroči me na upravno enoto
Ta hiter preskok iz analognega v digitalno življenje je seveda, poleg prilagajanja življenjskih navad posameznikov, zahteval investicije v novo opremo in storitve.
Vse aktivnosti pa kljub vsemu ne potekajo v celoti prek interneta. Predvsem storitve so takšno področje, kjer stranka obišče ponudnika, da pri njem opravi, ker ima opraviti. Med te spadajo tudi upravne enote, ki danes nastopajo v vlogi glavnega junaka zgodbe.
Upravne enote so lokalne izpostave izvršilne veje oblasti. Osebni dokumenti, gradbena dovoljenja, registracije društev, dovoljenja za bivanje, vozniške, prometne, kmetijske zadeve, poroke, ločitve, overitve ... vse se dobi na upravni enoti.
Zaradi korone je bilo treba omejiti tudi število ljudi v stavbah, kjer delujejo upravne enote. Da pa ljudje ne bi čakali pred stavbo, je bilo treba uvesti sistem naročanja - prek spleta. Takšnega načina poslovanja smo se, kot že rečeno, v zadnjih časih naučili in navadili že skorajda vsi. Vendar pa pred krizo upravne enote takšnega sistema niso imele. Treba je bilo najti nekaj, kar deluje in je, v maniri javnih naročil, poceni.
Upravne enote Ljubljana, Litija in Logatec so izbrale izvajalca Ortus Inc, d.o.o., ki je pripravil aplikacijo za naročanje. Spletna aplikacija je enostavna za uporabo. Izberete datum, upravno enoto, postopek, poveste koliko vas bo prišlo in dobite termin. V naslednjem koraku še vpišete ime in kontaktne podatke ter potrdite rezervacijo.
Te dni pa smo dobili obvestilo o morebitni varnostni luknji v sistemu. Kot nam je pojasnil naš vir, je aplikacija očitno ranljiva na vrivanje SQL stavkov (SQL injection).
Naj spomnimo, prav ta vrsta ranljivosti je bila problem tudi pri novih spletnih straneh AJPES.
Takrat smo zapisali, da je SQL injection ena od najbolj pogostih ranljivosti spletnih aplikacij. Gre za tako pogosto ranljivost, da se o njej učijo že začetniki programiranja. Kadar je spletna aplikacija ranljiva na SQL injection torej gre za neupoštevanje minimalnih dobrih praks na področju programiranja in za veliko malomarnost programerjev.
Kako deluje SQL injection? Aplikacija za svoje delovanje, za hrambo podatkov (npr. podatkov o osebah, ki so se naročile na termin na upravni enoti) uporablja zbirko podatkov. Aplikacija bere podatke iz zbirke in jih vanjo zapisuje s tem, da izvede ustrezne SQL ukaze. Ti ukazi se sestavijo iz v naprej pripravljenih delov, ki pa se dopolnijo s tem, kar je v aplikacijo vpisal uporabnik (npr. svoje ime). Slabo sprogramirane aplikacije vpisane podatke uporabijo v SQL ukazu neposredno, brez sprememb. To pomeni, da jih ne spremenijo niti v primeru, ko vpisani podatki vsebujejo dodatne SQL ukaze. Ti SQL ukazi, ki jih je uporabnik vpisal na primer namesto svojega imena v aplikacijo, se potem izvedejo v SQL strežniku. Na ta način lahko zlonamerni uporabnik SQL strežnik pripravi do tega, da mu da podatke, do katerih uporabnik sicer nima dostopa. Prav tako lahko podatke izbriše ali spremeni.
Poleg SQL injection so podatki na voljo tudi prek API. In sicer se do njih dostopa prek IDjev, ki pa so številčeni zaporedno. Tako jih sploh ni treba ugibati, ampak se lahko "uporabnik" po njih sprehodi s skripto.
Kakšne so posledice malomarnega programiranja v primeru aplikacije za naročanje na termin pri upravni enoti?
Kdorkoli lahko pogleda, kdo se je prijavil na termin, lahko termin izbriše ali ga spremeni. Kakšen bolj zloben napadalec bi lahko celo rezerviral vse proste termine in s tem onemogočil pravim strankam dostop do terminov. Pri zlorabah takšnih sistemov je omejitev le domišlja.
Ampak to še ni vse. Pod obrazcem za naročanje najdemo tudi pravno obvestilo. Iz njega je sklepati, da z izpolnitvijo obrazca za naročanje na termin pri upravni enoti, soglašate tudi z obdelavo osebnih podatkov za namen obveščanja (spam). Ni povsem jasno, komu ste to soglasje sicer dali - upravni enoti ali Ortus inc d.o.o. … V nadaljevanju, pod pravnim obvestilom, je še razdelek z informacijami o kontaktnem obrazcu, ki pa - nasprotno kot pravno obvestilo - obljublja, da podatke obdelujejo le za namene odgovora na vprašanje, ne pa za druge namene. Ampak to ni pravno obvestilo, a ne?
Kaj bi pričakovali? Aplikacijo, ki ni polna varnostnih lukenj. In pravno obvestilo, ki vsaj približno sledi Splošni uredbi. Iz obvestila bi moralo biti jasno kdo je upravljavec in kdo obdelovalec podatkov, namen obdelave in ustrezna podlaga za obdelave. Obvestilo bi moralo imeti tudi informacijo o možnosti pritožbe pri Informacijskem pooblaščencu. Predvsem pa bi moralo biti jasno in nedvoumno.
Predvsem gre pri naročanju na termin na upravni enoti za obdelavo osebnih podatkov za obdelavo, ki je potrebna za opravljanje naloge v javnem interesu ali pri izvajanju javne oblasti, dodeljene upravljavcu (torej upravni enoti). Take obdelave so po našem trenutno veljavnem Zakonu o varstvu podatkov podvržene "strogemu načelu zakonitosti", kar pomeni, da bi morala biti takšna obdelava posebej urejena v zakonu. Pa ni. Zakon bi moral določati, katere podatke se sme za naročanje na termin pridobiti, hraniti, kaj se sme s temi podatki početi, kako dolgo se to sme početi in kaj je treba z njimi narediti, ko ta rok poteče. Zakon ne določa ničesar, ker pač (jasno) ni predvidel situacije, ki jo je prinesla koronska kriza. In ne določa tega niti po dveh letih trajanja krize. Trenutno je sicer v pripravi nov Zakon o varstvu osebnih podatkov, ki pa žal tudi ne bo popravil situacije.
Kolikor denarja, toliko muzike. Za dobrih 300.000 EUR bi sicer pričakovali vsaj osnovno skrb za varnost osebnih podatkov in za upoštevanje dobrih praks programiranja, od države pa, da bi na varnost produktov vsaj pomislila.