Ievainojamības atklāšana
Servera avārija CERT.LV rīkā Graphoscope, ja lietotājs atvienojas augšupielādes laikā
Graphoscope (v2.6.1) – CERT.LV
OffSeq atklāja pakalpojuma atteices ievainojamību Graphoscope – CERT.LV publicētajā atvērtā koda platformā, kas ļauj no vienas saskarnes veikt vaicājumus daudzos neatkarīgos datu avotos un attēlot to sakarības grafā. Ja lietotājs augšupielādēja indikatoru sarakstu un aizvēra savienojumu pirms apstrādes beigām, serveris dereferencēja nil WebSocket un avarēja, izrakstot visus lietotājus. To droši varēja izraisīt jebkurš pašreģistrēts konts. OffSeq ziņoja par ievainojamību CERT.LV un iesniedza labojumu, ko CERT.LV iekļāva projektā.
OffSeq
2 min lasīšanai
Kritiskums: VidējsCVSS 6.5cert-lv/graphoscope#9
Galvenie fakti
- Klase
- NULL rādītāja dereferencēšana sacensību stāvokļa dēļ (CWE-476, CWE-362)
- Kritiskums
- Vidējs
- CVSS
- 6.5
- Mērķis
- Graphoscope
- Ražotājs
- CERT.LV
- Skartā daļa
- v2.6.1 (a2a794e) – WebSocket ziņojums pēc /upload
- Novērsts
- cert-lv/graphoscope PR #9 (sapludināts, commit 946ff7c)
- Statuss
- Novērsts sākotnējā projektā
- Loma
- Ziņotājs un labojuma autors
CVSS bāzes vērtējums
/ 10Vidējs
Katrs vērtējums veidojas no astoņiem vienkāršiem jautājumiem par to, kā uzbrukums darbojas un ko tas jums izmaksā.
Cik grūti to izmantot
Ko uzbrucējs var paveikt
Izvēlieties metriku, lai redzētu, ko tā nozīmē
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H
§ 01. Pārskats
Graphoscope ir CERT.LV atvērtā koda analīzes platforma. Analītiķi no vienas tīmekļa saskarnes veic vaicājumus daudzos neatkarīgos datu avotos – pasīvajā DNS, klientu datubāzēs, nopludinātu piekļuves datu kopās un citos – un redz rezultātus kā saistītu entītiju grafu. Lietotājs var augšupielādēt indikatoru sarakstu pakešapstrādei: serveris to apstrādā fonā un, kad pārskats ir gatavs, paziņo lietotājam caur WebSocket.
OffSeq konstatēja, ka šis paziņojums varēja apturēt visu serveri. Ja lietotājs atvienojās pirms apstrādes beigām, fona uzdevums rakstīja jau slēgtā WebSocket savienojumā, un radusies panika pārtrauca Graphoscope procesu.
§ 02. Cēlonis
uploadHandler apstrādi palaiž gorutīnā (upload.go:253). Kad tā beidzas, processUploads izsauc a.send("upload-processed", …) (upload.go:413). Account.send pārbaudīja tikai a.Session == nil – taču, klientam atvienojoties, atliktā slēgšana funkcijā listen() sesiju atstāj un notīra tikai savienojumu:
websocket.go pirms labojuma: sesija paliek, savienojums ne.Tā kā a.Session nebija nil, bet a.Session.Websocket bija nil, pārbaude izdevās un WriteMessage dereferencēja nil rādītāju. Turklāt slēgšana notīrīja lauku, neturot WebsocketMutex, tāpēc ar nil pārbaudi send() vien joprojām pastāvētu sacensību stāvoklis. Gorutīnai nebija recover(), tāpēc panika netika ierobežota:
§ 03. Ietekme
Viena augšupielāde un aizvērts savienojums aptur visu pakalpojumu, un visi pieteikušies lietotāji zaudē sesiju. Avārija nav atkarīga no šaura laika loga: pietiek aizvērt savienojumu jebkurā brīdī pirms apstrādes beigām, tāpēc izraisītājs nostrādā katru reizi.
Graphoscope atļauj pašreģistrāciju caur /signup, tāpēc uzbrucējam nav vajadzīgs nekas vairāk par paša izveidotu kontu. Atkārtojot pieprasījumu, platforma paliek nepieejama tik ilgi, cik uzbrucējs to turpina.
§ 04. Labojums
OffSeq iesniedza labojumu, kas skar tikai websocket.go:
send()beidz darbu uzreiz, ja sesija ir nil, pirms tiek nolasīts kāds tās lauks – iepriekšējais kļūdas ceļš žurnāla ierakstā dereferencējaa.Session.IP;send()atkārtoti pārbauda, vaia.Session.Websocketnav nil, turotWebsocketMutex– tieši tur to maina slēgšana;- slēgšana funkcijā
listen()izmanto to pašu mutex apClose()un nil piešķiršanu, tāpēc rakstītājs nekad neredz daļēji slēgtu savienojumu.
Atkārtotā pārbaudē tā pati reproducēšana pakalpojumu neapturēja: žurnālā bija redzams, ka klients aizver savienojumu un apstrādātais fails tiek pievienots lejupielāžu sarakstam, un /signin turpināja atbildēt ar 200. Kā turpmāki darbi tika ieteikti trīs saistīti uzlabojumi – slēgums koplietotajai online kartei, augšējā līmeņa recover() gorutīnās, ko palaiž pieprasījumu apstrādātāji, un pieprasījuma konteksta atcelšana apstrādei, kas vēl notiek. CERT.LV izmaiņas iekļāva kā izmaiņu pieprasījumu #9.
§ 05. Atklāšanas hronoloģija
- 2026-05-14OffSeq ziņo CERT.LV par servera avāriju WebSocket nil dereferencēšanas dēļ un iesniedz labojumu pamatprojektā (PR #9)
- 2026-10-20Labojumu pārskata un iekļauj CERT.LV uzturētāji
Atsauces
- Labojums sākotnējā projektā: cert-lv/graphoscope commit 946ff7c (atveras jaunā cilnē) (https://github.com/cert-lv/graphoscope/commit/946ff7c6d833d2c40b8d6a866af67cf0312fff97)
- Izmaiņu pieprasījums: cert-lv/graphoscope #9 (atveras jaunā cilnē) (https://github.com/cert-lv/graphoscope/pull/9)
- Graphoscope pirmkoda repozitorijs (CERT.LV) (atveras jaunā cilnē) (https://github.com/cert-lv/graphoscope)
- CWE-476: NULL rādītāja dereferencēšana (atveras jaunā cilnē) (https://cwe.mitre.org/data/definitions/476.html)
- CWE-362: Sacensību stāvoklis (atveras jaunā cilnē) (https://cwe.mitre.org/data/definitions/362.html)
Atzinība
Atklāja, ziņoja un novērsa Nils Putniņš (OffSeq Cybersecurity).
Citi rezultāti
Saglabātā starpvietņu skriptošana CERT.LV rīkā Graphoscope caur augšupielādes failu nosaukumiem
OffSeq atklāja saglabātās starpvietņu skriptošanas (XSS) ievainojamību Graphoscope – CERT.LV publicētajā atvērtā koda platformā, kas ļauj no vienas saskarnes veikt vaicājumus daudzos neatkarīgos datu avotos un attēlot to sakarības grafā. Augšupielādētā faila nosaukums tika saglabāts nemainīts un attēlots ar innerHTML, tādēļ indikatoru fails ar īpaši veidotu nosaukumu izpildīja skriptu tā analītiķa sesijā, kurš to augšupielādēja. OffSeq ziņoja par ievainojamību CERT.LV un iesniedza labojumu, ko CERT.LV iekļāva projektā.
Ievainojamības atklāšana20262 min lasīšanai
Piekļuve citu lietotāju pārskatiem CERT.LV rīkā Graphoscope
OffSeq atklāja horizontālu autorizācijas apiešanu Graphoscope – CERT.LV publicētajā atvērtā koda platformā, kas ļauj no vienas saskarnes veikt vaicājumus daudzos neatkarīgos datu avotos un attēlot to sakarības grafā. Pārskatu lejupielādes galapunkts pārbaudīja, vai lietotājs ir pieteicies, bet ne to, vai pieprasītais pārskats pieder viņam, tādēļ jebkurš analītiķis varēja nolasīt cita analītiķa augšupielādētos indikatorus un vaicājumu rezultātus. OffSeq ziņoja par ievainojamību CERT.LV un iesniedza labojumu, ko CERT.LV iekļāva projektā.
Ievainojamības atklāšana20262 min lasīšanai
Attālināta koda izpilde OZOLS ERP sistēmā caur pamestu atjaunināšanas domēnu
CVE-2026-22306 ir kritiska attālinātas koda izpildes ievainojamība, ko OffSeq atklāja OZOLS ERP sistēmā. Tās automātiskās atjaunināšanas kanāls ieguva un palaida programmkodu no its2.lv (domēna, ko ražotājs bija ļāvis izbeigties, bet kas joprojām bija iekodēts katrā piegādātajā klientā), pa atklātu HTTP bez paraksta, jaucējsummas vai sertifikāta pārbaudes. whois pieprasījums rādīja, ka domēns ir brīvi reģistrējams, tādēļ ikviens, kas to reģistrēja, varēja izpildīt kodu SQL Server servisa konta kontekstā uz klientu datubāzēm un, izmantojot paša OZOLS atjauninājumu izplatīšanas tabulu, uz katras darbstacijas. OffSeq aizsardzības nolūkā reģistrēja pamesto domēnu, lai novērstu ļaunprātīgu pārņemšanu.
Ievainojamības atklāšana20266 min lasīšanai
