På svenska


Käyttäjän tietoturvan parantamiseksi otetaan käyttöön menettely, jossa Opintopolun HTTP-rajapintoihin lisätään Cross-site Request Forgery -hyökkäyksiltä suojaava parametri. Parametri suojaa käyttäjää estämällä tilanteen, jossa hyökkääjä huijaa kirjautuneen käyttäjän selainta tekemään pyynnön, jota käyttäjä ei haluaisi itse tehdä. Suojaus toteutetaan käyttämällä Cookie Double Submit -tekniikkaa. Jotta suojaus olisi tehokas, sen on vaikutettava kaikkiin tilaa muuttaviin pyyntöihin, mikä aiheuttaa muutostarpeen sovelluksiin, jotka sellaisia pyyntöjä tekevät.

Toimenpiteet

Jos ylläpidät sovellusta, joka tekee tilaa muuttavia HTTP-pyyntöjä Opintopolkuun, pyyntöihin tulee lisätä seuraavat 2 asiaa:

  • Cookie, jonka nimi on "CSRF". Normaalin käytön yhteydessä Opintopolun palvelu lisää kaikkiin vastauksiinsa tuon cookien, ellei sitä tullut pyynnön mukana.
  • Cookien sisältö, joko
    • HTTP-headerissa jonka nimi on "CSRF", tai
    • POST-parametrissa, jonka nimi on "CSRF"

Mikäli kyseiset asiat puuttuvat, tai eivät vastaa toisiaan, Opintopolun palvelin palauttaa virheilmoituksen. Virheilmoituksessa viitataan tekniseen ohjeeseen, jota noudattamalla virhetilanteen saa korjatuksi.

Suhde Caller-id -headeriin

Caller-id header on pakollinen kaikissa pyynnöissä, myös niissä joissa CSRF-parametri on tarpeen. Koska CSRF-header hyväksytään myös pyynnöissä, joissa se ei ole pakollinen, sen lisääminen kannattaa tyypillisesti tehdä samassa vaiheessa kuin Caller-id:nkin.

Tekniset yksityiskohdat

Tilaa muuttavissa HTTP-pyynnöissä (verbi muu kuin "GET", "HEAD", "OPTIONS") pitää olla

  • CSRF cookie ja
  • CSRF http-header samalla arvolla tai
  • "CSRF" post parameter (case sensitive) samalla arvolla

Tilaa muuttavia HTTP-pyyntöjä tekevien sovellusten pitää huomioida CSRF:

  • Backend-sovelluksien pitää kutsuessaan toisia palveluja asettaa HTTP-pyyntöön sekä cookie että header. Sovellukset voivat käyttää kovakoodattuja CSRF arvoa, esim. sama kuin Caller-Id.
  • Opintopolku.fi -selainsovelluksien pitää palauttaa tilaa muuttavissa pyynnöissä CSRF header, joka vastaa CSRF-cookieta
  • Selainsovellukset muissa kuin opintopolku.fi domaineissa: tilaa muuttavia pyyntöjä ei voi tehdä koska CSRF keksiä ei voi selaimessa lukea.

opintopolku.fi:n nginx-proxy lisää HTTP-vastaukseen CSRF keksin, satunnaisella merkkijonolla, jos pyynnössä sitä ei ole.

Esimerkkitoteutuksia

https://github.com/Opetushallitus/varda-rekisterointi/blob/6bec2c727031b666a741b6534f0747b0272fe20d/src/index.tsx#L10-L14

https://github.com/Opetushallitus/omatsivut/blob/07413e2159a027c6d27753fa11500722d3bdaf1c/src/main/js/app.js#L128-L133

https://github.com/Opetushallitus/ataru/search?q=CSRF

Aikataulu

Parametri hyväksytään jo nyt, joten sen voi lisätä pyyntöihin saman tien.

Parametrin käytön pakollisuus tulee tuotantoympäristöön 7.12.2021.


Lisätietoa

https://owasp.org/www-community/attacks/csrf

https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie

Yhteystiedot

opintopolun_tt-ryhma@oph.fi 

Jakelulista

Sähköpostijakelulista oph-api@postit.csc.fi

API:hin liittyviä teknisiä tiedotteita varten on perustettu sähköpostijakelulista. Jos haluat liittyä jakelulistalle noudata alla olevia ohjeita.

Näin liityt sähköpostin jakelulistalle:

Lähetä viesti osoitteeseen sympa@postit.csc.fi osoitteesta johon jatkossa haluat viestien tulevan. Viestin otsikko-kenttään kirjoita: "subscribe oph-api etunimi koko_nimi". Vaihda kohtaan etunimi oma etunimesi ja kohtaan koko_nimi oma nimesi. Jätä viestikenttä tyhjäksi.

Näin poistut sähköpostin jakelulistalta:

Lähetä viesti osoitteeseen sympa@postit.csc.fi osoitteesta johon et jatkossa enää halua viestien tulevan. Viestin otsikko-kenttään kirjoita: "unsubscribe oph-api".


Att lägga till CSRF-token till HTTP-kallelser  

För att förbättra dataskyddet för användarna införs i gränssnitten i Studieinfo en Cross-site Request Forgery parameter, som ska förhindra dataintrång. Parametern skyddar användaren genom att förhindra att eventuella intrång lurar en inloggad användares webbläsare att göra en förfrågan, som användaren inte själv vill utföra. Dataskyddet genomförs med hjälp av Cookie Double Submit teknik. För att skyddet ska vara effektivt och gälla alla dataförfrågningar som ändrar status, bör åtgärder göras i alla tillämpningar som gör dataförfrågningar.

Åtgärder

Om ni upprätthåller tillämpningar som utför http-förfrågningar som ändrar status i Studieinfo, bör ni lägga till följande i förfrågningarna: 

  • En cookie, med namnet "CSRF". I normalt bruk läggs samma cookie till i alla svar, ifall det inte bifogats förfrågan.
  • innehållet i cookies, antingen
    • i HTTP-headern, med beteckningen "CSRF", eller
    • i POST-parametern, med beteckningen "CSRF"

Om dessa punkter saknas eller om de inte motsvarar varandra, ger Studieinfo-servern ett felmeddelande. I felmeddelandet hänvisas till en teknisk anvisning med närmare information.

Caller-id -header

En Caller-id header är obligatorisk i alla förfrågningar, också i dem som använder CSRF. Eftersom CSRF-header godkänns också i förfrågningar där den inte är obligatorisk, lönar det sig att lägga till den samtidigt som Caller-id.

Tekniska detaljer

I http-förfrågningar som ändrar status (verben som används är andra än "GET", "HEAD", "OPTIONS") ska ingå

  • CSRF cookie och
  • CSRF http-header med samma värde eller
  • "CSRF" post parameter (case sensitive) med samma värde.

Tillämpningar som förändrar status i http-förfrågningar bör beakta CSRF:

  • I Backend-tillämpningar bör då den skickar en kallelse till övriga tjänster läggas till i http-förfrågan både en cookie och en header. I tillämpningarna kan man använda ett hårdkodat CSRF värde, t.ex. detsamma som Caller-Id.
  • Webbläsartillämpningarna i Studieinfo.fi bör återställa CSRF header motsvarande CSRF-cookies i förfrågningar som ändrar status.
  • Webbläsartillämpningar i andra domäner än Studieinfo.fi: Det går inte att göra dataförfrågningar som ändrar status eftersom det inte går att läsa CSRF-cookies i webbläsaren.

En nginx-proxy i studieinfo.fi lägger till i HTTP-svaret en CSRF cookie med en slumpmässig teckensträng, om förfrågan saknar en sådan.  

Exempel

https://github.com/Opetushallitus/varda-rekisterointi/blob/6bec2c727031b666a741b6534f0747b0272fe20d/src/index.tsx#L10-L14

https://github.com/Opetushallitus/omatsivut/blob/07413e2159a027c6d27753fa11500722d3bdaf1c/src/main/js/app.js#L128-L133

https://github.com/Opetushallitus/ataru/search?q=CSRF

Tidtabell

Parametern godkänns redan så den kan läggas till i dataförfrågningarna genast.

Det blir obligatoriskt att använda parametern i QA-omgivningen från den 27 september och den införs i produktionsversionerna efter att alla integrationer har testats att de fungerar.

Ytterligare information

https://owasp.org/www-community/attacks/csrf

https://cheatsheetseries.owasp.org/cheatsheets/Cross-Site_Request_Forgery_Prevention_Cheat_Sheet.html#double-submit-cookie

Kontaktinformation

opintopolun_tt-ryhma@oph.fi 

Sändlista

Sändlista för e-post oph-api@postit.csc.fi

I anknytning till API och olika tekniska meddelanden har UBS bildat en e-postlista. Du kan ansluta dig till listan enligt följande anvisningar:  

Skicka ett meddelande till adressen sympa@postit.csc.fi från den adress till vilken du vill få meddelanden. Skriv i meddelandets rubrikfält: "subscribe oph-api förnamn hela namnet". Byt ut förnamn till ditt eget förnamn och skriv sedan hela ditt namn (för- och efternamn). Lämna meddelandefältet tomt.


Så här skriver du ut dig ur e-postlistan:

Skicka ett meddelande till adressen sympa@postit.csc.fi från den adress till vilken du inte längre vill ta emot meddelanden. Skriv i meddelandets rubrikfält: "unsubscribe oph-api".


  • No labels