Visi rezultāti

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

6.5

/ 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:

go
1defer func() {2    close(a.Session.Done)3    a.Session.Websocket.Close()4    a.Session.Websocket = nil5    delete(online, a.Username)6}()
1. fragmentsSlēgšana 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:

1panic: runtime error: invalid memory address or nil pointer dereference2[signal SIGSEGV: segmentation violation code=0x2 addr=0x10 pc=0x104d606b4]34github.com/gorilla/websocket.(*Conn).WriteMessage(...)5        .../gorilla/websocket@v1.5.3/conn.go:760 +0x246main.(*Account).send(...)7        .../graphoscope/websocket.go:502 +0x1748main.(*Account).processUploads(...)9        .../graphoscope/upload.go:413 +0xaa8
2. fragmentsSteka izsekošana pirms labojuma pēc augšupielādes un aizvērta savienojuma.

§ 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ēja a.Session.IP;
  • send() atkārtoti pārbauda, vai a.Session.Websocket nav nil, turot WebsocketMutex – tieši tur to maina slēgšana;
  • slēgšana funkcijā listen() izmanto to pašu mutex ap Close() 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

  1. 2026-05-14OffSeq ziņo CERT.LV par servera avāriju WebSocket nil dereferencēšanas dēļ un iesniedz labojumu pamatprojektā (PR #9)
  2. 2026-10-20Labojumu pārskata un iekļauj CERT.LV uzturētāji

Atsauces

Atzinība

Atklāja, ziņoja un novērsa Nils Putniņš (OffSeq Cybersecurity).

Kā mēs pārbaudītu jūsu vidi

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

Vai jūsu vidē pastāv līdzīgs risks?

support@offseq.com+371 2256 5353