Reģ. Nr. 40203410806PVN LV40203410806

Tēma

Pieteikt konsultācijuPieteikt

01 / 10Ievainojamības atklāšana

Attālināta koda izpilde OZOLS ERP sistēmā caur pamestu atjaunināšanas domēnu

OZOLS (OzolsSQL) operētājsistēmai Windows

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.

Kritiskums: KritisksCVSS10.0CVE-2026-223066 min lasīšanai

§ 01. Pārskats

OZOLS ir ERP un grāmatvedības sistēma, ko izmanto Latvijas uzņēmumi; tā balstās uz Microsoft SQL Server ar Windows klientu. Tāpat kā daudzi ilgdzīvojoši biznesa produkti, tā atjaunina sevi automātiski: uzdevums klienta datubāzes serverī iegūst jaunus programmas failus no ražotāja lejupielādes resursdatora un izvieto tos uz katras darbstacijas.

OffSeq atklāja, ka atjaunināšanas resursdators – its2.lv – ir domēns, ko ražotājs bija ļāvis izbeigties, kaut arī tas joprojām bija iekodēts katrā izvietotajā klientā. Atjaunināšanas kanāls darbojās pa atklātu HTTP bez paraksta, jaucējsummas vai sertifikāta validācijas, tādēļ tas, kurš kontrolēja domēnu, kontrolēja kodu, ko OZOLS lejupielādēja un izpildīja. whois pieprasījums apstiprināja, ka domēns ir brīvi reģistrējams. Tā ir mācību grāmatas piegādes ķēdes pārņemšana: reģistrē vienu izbeigušos domēnu, un tev ir attālināta koda izpilde SQL Server servisa konta kontekstā katrā skartajā instalācijā, izplatoties no turienes uz visām tās darbstacijām. Lai neļautu īstam uzbrucējam izdarīt tieši to, OffSeq aizsardzības nolūkā reģistrēja its2.lv, kamēr atklāšana tika koordinēta ar CERT.LV. Tā tiek uzskaitīta kā CVE-2026-22306.

§ 02. Kā darbojas OZOLS atjaunināšanas kanāls

Atjaunināšanu vada no klienta SQL Server. Pastāvīgs SQL Server Agent uzdevums <db>_update (@subsystem = N'ActiveScripting') kopā ar serv_update.vbs iegūst failus pa atklātu HTTP, izmantojot MSDAIPP.DSO.1 WebDAV nodrošinātāju no fiksēta ceļa:

http://www2.its2.lv/Download/ozols/progs/

Tas lejupielādē secībā Vers.txt, ozolssql.arh, ozols.arh un arj.exe. Vienīgais lēmums, ko tas pieņem, ir skaitliska salīdzināšana: Vers.txt norāda versiju, un, ja tā ir augstāka par uzstādīto, atjaunināšana turpinās. Nav TLS, nav ciparparaksta, nav kontrolsummas un nav WinVerifyTrust – nekā, kas sasaistītu lejupielādētos failus ar ražotāju.

Lejupielādētais arj.exe – izpildāmais fails, kas iegūts no tā paša neuzticamā kanāla – pēc tam tiek palaists, lai atpakotu ozols.arh, izmantojot WScript.Shell.Run un/vai master..xp_cmdshell. Atpakotais arhīvs tiek ierakstīts SQL datubāzes tabulā sprg ar paaugstinātu versijas numuru (TRUNCATE, kam seko INSERT). Startējot katrs OZOLS klients salīdzina savu versiju ar sprg, izvelk ozols.arh no tabulas, atpako to pāri savai programmas mapei un pārstartējas. Tādēļ jebkurš kods, kas ienāk caur atjauninājumu, vispirms sasniedz datubāzes serveri un pēc tam automātiski visu darbstaciju parku, kas pievienots šai datubāzei.

§ 03. Cēlonis: pamests domēns, kam joprojām uzticas

Ievainojamība nav smalka loģikas kļūda – tā ir uzticēšanās nosaukumam, kas ražotājam vairs nepiederēja. Visas integritātes pārbaudes, kas šim atjaunināšanas ceļam ir nepieciešamas, izpaliek, un vienīgais identifikators, kas to sasaistīja ar ražotāju, bija atdots:

Nepieciešamā atjaunināšanas pārbaudeStāvoklis OZOLS
Pārraides drošība (TLS)nav – atklāts HTTP caur WebDAV
Avota resursdatora autentiskumsnav – its2.lv bija pamests un brīvi reģistrējams
Parakstīta vai hešota pakotnenav – nav paraksta, nav kontrolsummas, nav WinVerifyTrust
Uzticams atpakotājsnav – arj.exe tiek iegūts no tā paša kanāla
Vienīgā veiktā pārbaudeskaitliska versijas salīdzināšana no Vers.txt
1. tabulaVisas atjauninājumam nepieciešamās integritātes pārbaudes izpaliek, un avota resursdators vairs nebija ražotāja.

whois pieprasījums .lv reģistram atgrieza domēna statusu kā brīvu:

whois -h whois.nic.lv its2.lv
# -> Status: free

Tā kā its2.lv joprojām bija piegādātajos klientos iekodētais atjauninājumu avots, tas, kurš to reģistrēja, piegādātu OZOLS atjauninājumus. Viena izbeigušos domēna kontrole ir kontrole pār kodu, kas darbojas uz katra klienta SQL Server un darbstacijām.

§ 04. Koncepcijas pierādījums

Ķēde tika demonstrēta no sākuma līdz beigām kontrolētā vidē. Lai īsts uzbrucējs nevarētu sagrābt domēnu koordinācijas laikā, OffSeq aizsardzības nolūkā reģistrēja its2.lv (kopā ar locta.lv un softex.lv – vēl diviem pamestiem šī paša klienta nosaukumiem).

Ļaunprātīgs atjaunināšanas serveris tika izveidots pa WebDAV/HTTP ceļā, ko klients pieprasa, norādot augstāku versiju un nekaitīgu slodzi:

http://www2.its2.lv/Download/ozols/progs/OzolsSQL/
    Vers.txt        # 1. rinda = DbVers, 2. rinda = PrgVers (augstāka par upura versiju)
    ozols.arh       # ARJ arhīvs ar PoC slodzi (nekaitīgs marķieris)
    arj.exe         # nekaitīgs iesaiņotājs demonstrācijai

Nekaitīgam pierādījumam arj.exe tika aizstāts ar iesaiņotāju, kas tikai izveido marķiera failu:

bat

@echo off
echo PoC-OZOLS-%COMPUTERNAME%-%DATE% > C:\ozols_update_poc.txt

Atjaunināšanas pārbaudes palaišana testa SQL instancē – tieši tas, ko dara <db>_update Agent uzdevums – iedarbina ķēdi:

sql

EXEC msdb.dbo.sp_start_job @job_name = N'<db>_update';

Rezultāts apstiprināja abas ietekmes puses: C:\ozols_update_poc.txt parādījās SQL Server, pierādot koda izpildi servisa konta kontekstā; un PoC ozols.arh nonāca sprg tabulā ar paaugstinātu versiju, tādēļ nākamajā startēšanas reizē katrs klients to izvilka un palaida – apstiprinot izplatīšanos uz darbstacijām.

Aizsardzības nolūkā turētais domēns arī sniedza pasīvu reālo, nelaboto instalāciju uzskaiti bez neviena upura ekspluatācijas – produkcijas sistēmas pašas vērsās pie tā:

GET /Download/ozols/progs/OzolsSQL/Vers.txt          (User-Agent: MSDAIPP / WebDAV)  -> dzīvs, ievainojams SQL hosts
GET /misc/proglstxml.asp?skfid=164&fltr=@nSswId=<N>  (User-Agent: MSXML3)            -> dzīvs klients; <N> = instalācijas ID

nSswId vērtība identificē konkrēto klienta organizāciju aiz katra pieprasījuma, kas noder skarto pušu informēšanai.

§ 05. Ietekme un kritiskums

Publicētie rādītāji ir CVSS 4.0 bāzes vērtība 10.0 (kritisks) (CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H) un CVSS 3.1 bāzes vērtība 10.0 (kritisks) (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H). Uzbrukums notiek pa tīklu, ar zemu sarežģītību, tam nav vajadzīgas privilēģijas un nav vajadzīga lietotāja mijiedarbība: SQL Agent uzdevums pats pēc sava grafika aptaujā pamesto resursdatoru, tādēļ uzbrucējs, kas tur domēnu, vienkārši gaida, kamēr katra instalācija iegūst un palaiž slodzi.

Sekas ir pilnīga kompromitēšana. Kods vispirms darbojas kā SQL Server servisa konts – pilna kontrole pār grāmatvedības un ERP datubāzi – un pēc tam, izmantojot sprg izplatīšanos, uz katras darbstacijas, kas palaiž klientu, tāpēc CVSS tvērums (scope) ir mainīts un ietekme uz turpmākajām sistēmām ir augsta. Tas ir tārpveidīgs izplatīšanas mehānisms, vērsts pret tā īpašnieku: tieši tā funkcija, kas veidota, lai izplatītu atjauninājumus visā parkā, kļūst par uzbrucēja piegādes tīklu.

§ 06. Novēršana

Atjaunināšanas kanālam no sākuma līdz beigām jāatjauno autentiskums. Lejupielādes resursdatoram jāatrisinās uz domēnu, kas pieder ražotājam, un jābūt pieejamam pa HTTPS ar pienācīgu sertifikāta validāciju; lejupielādētā pakotne jāpārbauda pirms palaišanas ar ciparparakstu vai piesaistītu jaucējsummu, lai aizstāts arhīvs tiktu noraidīts; un atpakošanas rīku vispār nedrīkst iegūt no atjaunināšanas kanāla – arj.exe lejupielādes vietā jāizmanto uzticams, lokāli pieejams rīks. Atkarības no jebkura trešās puses reģistrējama domēna novēršana ir noturīgais labojums.

Ozols Grupa koordinācijas laikā ziņoja, ka problēma ir novērsta. Kamēr atjaunināta laidiena izvietošana nav apstiprināta, operatori to var ierobežot tieši: atspējot vai izdzēst <db>_update SQL Server Agent uzdevumu un noņemt serv_update.vbs; bloķēt izejošo piekļuvi no datubāzes serveriem un darbstacijām uz its2.lv un www2.its2.lv (un ierobežot patvaļīgu izejošo HTTP no šiem resursdatoriem); atspējot xp_cmdshell skartajās SQL Server instancēs; darbināt SQL Server servisu ar mazāko privilēģiju kontu; un pārbaudīt sprg tabulu, vai tajā nav negaidītu versijas paaugstinājumu vai arhīva satura.

§ 07. Atklāšana un iznākums

Ievainojamība tika paziņota CERT.LV, izmantojot Latvijas nacionālo koordinētās ievainojamību atklāšanas platformu, 2026. gada 30. jūnijā, izvērtēta un pārsūtīta atbildīgajai personai 6. jūlijā, bet ražotājs koordinācijas lietai pievienots 16. jūlijā. CVE-2026-22306 tika rezervēts 2026. gada 30. jūlijā, kad ražotājs ziņoja, ka problēma novērsta. Visu šo laiku OffSeq turēja pamesto its2.lv domēnu, lai tas nenonāktu ļaunprātīgās rokās. Atklāšanu koordinē CERT.LV.

Atradums tiek attiecināts uz Nilu Putniņu (OffSeq Cybersecurity).

§ 08. Atklāšanas hronoloģija

  1. 2026-06-30OffSeq ziņo CERT.LV par pamestā domēna RCE, izmantojot nacionālo koordinētās atklāšanas platformu
  2. 2026-07-06CERT.LV izvērtē ziņojumu un pārsūta atbildīgajai personai
  3. 2026-07-16Koordinācijas lietai pievienots ražotājs Ozols Grupa
  4. 2026-07-30Rezervēts CVE-2026-22306; ražotājs ziņo, ka problēma novērsta

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