Sokáig gondolkoztam, hogy mi legyen a bejegyzés címe, de mivel egyszerűen képtelen voltam szavakkal leírni ami a fejemben járt, úgy döntöttem, hogy inkább megpróbálom megjeleníteni azt, hogy milyen arcot vágtam mikor az alábbi történetet
olvastam:
Oklahoma állam büntetésvégrehajtási rendszerének adatai egészen a közelmúltig SQL injection segítségével bárki számára hozzáférhetőek voltak. Legalább három éve. Ez bár durva, de még mindig nem túl megdöbbentő. Az viszont, hogy a hibás szkript ilyen formában várta a paramétereket:
http://docapp8.doc.state.ok.us/pls/portal30/url/page/sor_roster?sqlString=select distinct o.offender_id,doc_number,o.social_security_number,o.date_of_birth,o.first_name,o.middle_name,o.last_name,o.sir_name,sor_data.getCD(race) race,sor_data.getCD(sex) sex,l.address1 address,l.city,l.state stateid,l.zip,l.county,sor_data.getCD(l.state) state,l.country countryid,sor_data.getCD(l.country) country,decode(habitual,'Y','habitual','') habitual,decode(aggravated,'Y','aggravated','') aggravated,l.status,x.status,x.registration_date,x.end_registration_date,l.jurisdiction from registration_offender_xref x, sor_last_locn_v lastLocn, sor_offender o, sor_location l , (select distinct offender_id from sor_location where status = 'Verified' and upper(zip) = '73064' ) h where lastLocn.offender_id(%2B) = o.offender_id and l.location_id(%2B) = lastLocn.location_id and x.offender_id = o.offender_id and x.status not in ('Merged') and x.REG_TYPE_ID = 1 and nvl(x.admin_validated,to_date(1,'J')) >= nvl(x.entry_date,to_date(1,'J')) and x.status = 'Active' and x.status <> 'Deleted' and h.offender_id = o.offender_id order by o.last_name,o.first_name,o.middle_name&sr=yes
nálam egy hangyányit kiverte a biztosítékot... Percekig bámultam tátott szájjal a képernyőt, és csodáltam az emberi hülyeség eme nagyszerű manifesztációját. A lekérdezés módosításával 10.579 szexuális bűnöző, nyilvánosan meztelenkedő fiatalkorú, és közterületen vizelő gazember 7MB-nyi bizalmas adatát érhettük el, vagy akár fel is vehettük közéjük a szomszédot, aki vasárnap reggel túl hangosan nyírja a füvet. Ha kicsit tovább játszottunk a paraméterekkel, az összes nyilvántartásba vett bűnelkövető adatait lekérdezhettük és módosíthattuk.
Alex Papadimoulis (az eredeti cikk szerzője), akit egy AJ nevű olvasó értesített a hibáról persze kapcsolatba lépett a hivatallal, akik ígéretet tettek, hogy javítják a hibát. Nem sokkal később ez előzőleg gyártott, speciális kérések valóban csődöt mondtak, a programozók ugyanis elkezdték szűrni a kérésekben szereplő olyan karakterláncokat, melyek bizalmas információkra vonatkoznak. Így pl. a "social_security_number"-t (társadalombiztosítási szám) tartalmazó kérések nem futottak le. A "Social_security_number"-t tartalmazók viszont igen...
Papadimoulis ekkor egy újabb bejelentést tett, melyben kifejtette, hogy a hibás szkript segítségével akár a nyilántartásba vettek orvosi adatai is lekérdezhetőek. Ez már megtette a hatását: a hibás alkalmazást eltávolították az oldalról (ahol mellesleg egy, a parlament.hu-éhoz hasonló PL/SQL gyönyörűség fut ;). Ez azonban nem rendített meg abban a hitemben, hogy Oklahomában
homoki sügérekkel programoztatnak.