Abitista on korjattu kaksi tietoturvahaavoittuvuutta

Abitista on korjattu kaksi vakavaa tietoturva-aukkoa. Ensimmäinen, merkitykseltään vähäisempi haavoittuvuus koskee kokelaan tikkua. Tämä on korjattu versiossa ABITTI2118E. Huomattavasti vakavampi haavoittuvuus koskee palvelintikkua. Tämä haavoittuvuus on korjattu versiossa SERVER21174.

Molemmat haavoittuvuudet ovat olleet kevään 2021 ylioppilaskokeissa käytetyissä tikkuversioissa. Ylioppilastutkintolautakunta ei ole löytänyt merkkejä siitä, että näitä haavoittuvuuksia olisi hyödynnetty kevään kokeissa.

Kokelaan tikun haavoittuvuus

Kokelaan tikusta on löytynyt haavoittuvuus, jonka avulla kokeen suorittaja voi saada pääkäyttäjän oikeudet. Tämä mahdollistaa esimerkiksi palomuurin muokkaamisen ja siten vapaan internetin käytön sekä tietokoneen omalla levyllä olevien aineistojen ja ohjelmien hyödyntämisen. Lisäksi haavoittuvuus helpottaa koetilanteen häiritsemistä.

Haavoittuvuus perustuu siihen, että pääkäyttäjän oikeuksien kontrolloituun käyttöön tarvittavan pkexec-ohjelman määrittelytiedostot olivat jääneet asentamatta tikulle. Tämän seurauksena pkexec-ohjelmalla saattoi ajaa mitä tahansa ohjelmia, kun normaalitilanteessa ohjelman käyttö on rajoitettu esimerkiksi näytön kirkkauden säätöön.

Haavoittuvuus on ollut Abitissa versiosta ABITTI20451 alkaen. Vika johtui siitä, että Debian Buster –versioon siirryttäessä tikun rakentamisessa käytetyissä skripteissä ei ajettu rajoitukset lisääviä koodeja.

Kiitämme yhteydenotosta Tuure Luostoa, joka toi asian tietoomme.

Palvelintikun haavoittuvuus

Palvelintikulta on löytynyt erittäin vakava haavoittuvuus, joka mahdollistaa murtautumisen koeverkosta koetilan palvelimelle ja siellä mielivaltaisten komentojen ja ohjelmakoodin suorittamisen. Hyökkääjä voi esimerkiksi hakea kaikkien kokeisiin osallistuneiden henkilötiedot tai koesuoritukset tai muuttaa niitä.

Tätä mahdollisuutta hyödyntämällä hyökkääjä voi asentaa koetilan palvelimelle päivityspaketin, joka asennetaan kaikkien koeverkkoon liittyvien kokelaiden Abitti-ympäristöön. Tämä kokelaiden tikulle asennettava ohjelmakoodi voidaan ajaa pääkäyttäjän oikeuksin, joten se voisi esimerkiksi pyyhkiä kokelaan tietokoneen oman käyttöjärjestelmän tai asentaa tietokoneelle pysyviä haittaohjelmia.

Haavoittuvuuden hyödyntäminen vaatii sitä, että kokeen suorittajalla on kokelaan koeympäristön pääkäyttäjän oikeudet. Tämänkin jälkeen hyväksikäyttäminen vaatii ennalta runsasta suunnittelua sekä ennakoivaa valmistautumista ja teknistä osaamista. Runsaasta valmistautumisesta huolimatta on todennäköistä, että hyökkääjä jää kiinni jossain vaiheessa hyökkäystä. Hyökkäys on kuitenkin helposti toistettava, mikäli ”pohjatyö” on jo kerran tehty. Tarkka selvitys hyväksikäytön mahdollistaneista tietoturva-aukoista löytyy tämän viestin lopusta.

Tämän useita tietoturva-aukkoja yhdistävän hyökkäystavan löysivät Mikael Hannolainen, Ruben Mkrtumyan ja Eemil Sinkko. Heidän yhteydenottonsa lautakuntaan oli poikkeuksellisen ammattimainen ja mahdollisti ongelman nopean korjaamisen. Useita haavoittuvuuksia ketjuttaneen tietoturva-aukon löytäminen osoittaa laaja-alaista tietotekniikan hallintaa ja poikkeuksellista omistautumista tietoturvalle.

Haavoittuvuus tuli tietoomme kevään ylioppilastutkinnon koepäivien aikana. Koska emme halunneet vaarantaa koejärjestelyjä laajalla päivityksellä kesken tutkintoa mutta silti reagoida asiaan mahdollisimman nopeasti, aloitettiin toimenpiteet lisäämällä Abitti-kokeisiin päivityspaketin, joka asensi koetilan palvelimille hyökkäykseltä suojaavan ohjelmakoodin. Ikävä kyllä päivitys ei aivan kaikissa tilanteissa asennu palvelimelle ja siksi kaikki Abitti-palvelimet on päivitettävä.

Vapaaehtoisten ilmoitukset ovat tärkeitä YTL:lle

Abitin kehittäminen alkoi poikkeuksellisissa merkeissä: vuonna 2013 silloinen DigabiOS lanseerattiin Hackabi-hakkerointikisalla. Vuosien varrella meille on tullut useita ilmoituksia erilaisista haavoittuvuuksista. Tyypillinen ilmoittaja on lukioikäinen tietotekniikan tuntija, joka on käyttänyt runsaasti aikaa Abitin tutkimiseen.

Vapaaehtoisten harrastajien ilmoitusten lisäksi tietoturvahaavoittuvuuksia etsivät tietoturva-ammattilaiset. Haavoittuvuuksia etsitään aina, kun avaamme jonkin uuden palvelun tai palveluun tehdään merkittäviä muutoksia. Ammattilaiset hyödyntävät erilaisia skannereita ja työkaluja, jotka tekevät perustutkinnasta tehokasta. Kun tyypilliseen tietoturvakartoitukseen käytetään noin viikko, voi vapaaehtoinen motivoitunut lukiolainen etsiä puutteita kuukausikaupalla. Opiskelijoiden etuna on myös se, että koetilanteen ja lukion konteksti on heille tuttu. Ei ole yllätys, että vielä uransa alkuvaiheessa olevat vapaaehtoiset löytävät puutteita.

Tietoturva-aukkoja ei ole tilastoitu, mutta korjauksiin päätyneistä havainnoista hiukan yli puolet on löytynyt ammattilaisten toimesta ja loput yleisöltä. Ylioppilastutkintolautakunta on sitoutunut julkistamaan kaikki tietoon tulleet tietoturvapoikkeamat kolmen kuukauden kuluessa. Olemme tottuneet vastaanottamaan sekä yksinkertaisia sähköposteja että ammattimaisia hyökkäyskoodin sisältäviä ilmoituksia.

Kiitokset kaikille entisille, nykyisille ja tuleville Abitin tietoturva-aukkojen etsijöille!

YTL:n tietoturva-asiantuntijoiden kuvaus palvelinhaavoittuvuuden mahdollistaneista tietoturva-aukoista

Tarkasteltu tietoturvahavainto koskee kolmea haavoittuvuutta Abitti-järjestelmässä, joita ketjuttamalla saavutetaan root-tason oikeudet koetilan palvelimella.

(Redirect, Server side request forgery (SSRF)) Ensimmäinen haavoittuvuus liittyy koetilan palvelimen suorittamaan NSA-valvontaan, jossa lähetetään valvontakutsu kokeeseen osallistuvan laitteelle. Valvontakutsu vastaanotetaan omalla palvelulla, josta palautetaan koetilan palvelimelle uudelleenohjauspyyntö (307). Uudelleenohjauspyyntö ohjautuu koetilan palvelimen paikalliseen palveluun, joka on paikallisessa osoitteessa 127.0.0.1 portissa 8021. Kyseiseen palveluun ei ole suoraa yhteyttä ulkopuolisilta laitteilta. Palvelimen sisäinen uudelleenohjaus aiheuttaa sen, että ulkopuolelta tullut käsky ajetaan sisäisessä järjestelmässä.

(Command injection) Toinen haavoittuvuus on koetilan palvelimen rajapinnassa, jolla on tarkoitus tallentaa koevastaukset. Kyseiseen järjestelmään ei ole mahdollista ajaa koetilan palvelimen ulkopuolelta käskyjä, mutta uudelleenohjauspyyntö ohjaa kutsun paikallisesti, jolloin kutsu ohjataan haavoittuvaan paikalliseen rajapintaan. Haavoittuvuus kyseisessä rajapinnassa on siinä, että siihen on mahdollista liittää mielivaltaisia komentoja argumentiksi ja rajapinta suorittaa komennot palvelimella.

(Privilege escalation) Kolmas haavoittuvuus liittyy ”koetila” -käyttäjän sudo-oikeuksiin. Koetila:lla on oikeus luoda, sekä ajaa sudo-oikeuksilla (pääkäyttäjänä) skripti /tmp/ktp-update-work/ktp-update.sh. Tämä tarkoittaa sitä, että koetila-käyttäjä pystyy korottamaan oikeutensa pääkäyttäjätasolle luomalla oman skriptinsä kyseiseen hakemistoon ja ajamalla skriptinsä sudo /bin/bash /tmp/ktp-update-work/ktp-update.sh komennolla.

Ketjuttamalla kolme haavoittuvuutta hyökkääjä pystyy etänä suorittamaan haitallista koodia koetilan palvelimella (Remote code execution) pääkäyttäjänä.

Saatuaan järjestelmään pääsyn hyökkääjä pystyy ajamaan pääkäyttäjänä koodia koetilan palvelimella sekä tietyissä olosuhteissa myös kokelaiden päätelaiteilla. Tällöin vaarantuu tiedon eheys, luotettavuus ja saatavuus, niin palvelimella kuin kokelaiden järjestelmissä. Kokelaiden päätelaitteilla root-tasoisena koodin ajaminen altistaa myös tietyissä tapauksissa kokelaiden alkuperäisen käyttöjärjestelmän hyökkäyksille tai väärinkäytölle. Mielivaltaisen koodin ajaminen kokelaslaitteilla vaatii sen, että kokelaslaite hakee päivityksen palvelimelta. Kokelaslaite hakee päivityksen palvelimelta kokelaslaitteen käynnistyksen tai uudelleenkäynnistyksen yhteydessä.

Koetilan palvelimen koodissa haavoittuva funktio (Command injection) on ollut vuodesta 2015 lähtien, mutta sen hyödyntäminen SSRF-haavoittuvuuden avulla on ollut mahdollista vasta 1.10.2019 eteenpäin. Haavoittuvuudet ovat paikattu 4/2021.