drošība · 6 min · 14.07.2026

gawk 5.4.1 aizver četras atmiņas kļūdas — uzbrucēja teksts var avarēt awk skriptu vai pārrakstīt kaudzi

GNU awk jeb gawk, teksta apstrādes rīks, kas ir uz gandrīz katra Linux un Unix servera, 13. jūlijā saņēma četru drošības kļūdu izlabojumu. Visas skar 5.4.0 un vecākas versijas, visas salaboja gawk 5.4.1, un visas nāk no viena avota — Polijas datordrošības komandas CERT Polska koordinētas atklāšanas, kuru pieteica pētnieki Michał Majchrowicz un Marcin Wyczechowski no uzņēmuma AFINE.

Neviena no kļūdām nedod attālu piekļuvi bez priekšnosacījumiem. Bet gawk gandrīz nekad neapstrādā tikai savus datus — tas lasa žurnālfailus, CSV eksportus, tīkla atbildes un lietotāju ievadi shell konveijeros. Tieši tur uzbrucēja kontrolēts teksts nokļūst gawk iekšienē.

Kas ir gawk un kur tas darbojas

gawk ir GNU projekta awk implementācija — valoda un rīks tekstu meklēšanai un pārveidošanai pa rindām un laukiem. To izmanto sistēmu administratori žurnālu apkopošanai, izstrādātāji būvēšanas skriptos un praktiski katrs Bash konveijers, kas kaut ko filtrē vai pārrēķina. gawk 5.4.0, kas iznāca 22. februārī, ienesa jaunu regulāro izteiksmju dzinēju MinRX, ko rakstīja Mike Haertel — sākotnējais GNU grep autors.

Tas nozīmē, ka gawk bieži stāv vietā, kur dati ienāk no ārpuses. Skripts, kas ar gawk apstrādā tīmekļa servera piekļuves žurnālu, apstrādā rindas, kuras raksta ikviens, kas atver lapu. Skripts, kas parsē lietotāja augšupielādētu failu, apstrādā baitus, ko izvēlējies augšupielādētājs. Kļūda gawk atmiņas apstrādē šādā vietā skar reālus, svešus datus.

Četras kļūdas, viena versija

Nopietnākā no četrām ir steka pārpilde CVE-2026-40553 failā extension/readdir.c, funkcijā ftype(). Tā skar readdir paplašinājumu, kas ļauj awk skriptiem lasīt direktoriju saturu. CERT Polska apraksts to formulē tieši:

Steka bāzes bufera pārpilde… to varētu izmantot programmas avarēšanai un, iespējams, koda izpildei, lai gan pēdējais nav apstiprināts kā iespējams.

CVSS 4.0 vērtējums šai kļūdai ir 5.1 (vidēja bīstamība). readdir paplašinājumu ielādē ar @load "readdir", un to izmanto skripti, kas apstaigā failu sistēmu — piemēram, dublēšanas un inventarizācijas rīki, kas gawk iekšienē lasa direktoriju rindu pa rindai. ftype() nosaka faila tipu; tieši šeit uzbrucēja veidots ieraksts direktorijā var pārpildīt steku.

Tāds pats 5.1 ir arī CVE-2026-40467 — use-after-free failā io.c, funkcijā do_getline_redir(), kas apstrādā getline ar novirzīšanu. Use-after-free rodas, kad kods lasa atmiņas apgabalu, kas jau ir atbrīvots; rezultāts ir avārija vai, sliktākā gadījumā, uzbrucēja datu nolasīšana no atkārtoti izmantotas atmiņas. Šī kļūda noved līdz avārijai.

Divas atlikušās skar veselo skaitļu pārpildi failā builtin.c. Veselā skaitļa pārpilde nozīmē, ka aprēķins pārsniedz mainīgā ietilpību un aptinas, tāpēc gawk atvēl mazāku buferi, nekā dati prasa. CVE-2026-40468 tā var izsmelt operētājsistēmas atmiņu un pārrakstīt gawk kaudzes metadatus ar uzbrucēja izvēlētiem baitiem; tās CVSS ir 2.1, jo izmantošanai vajag konkrētus apstākļus. CVE-2026-40469 sēž funkcijā do_sub(), ko izsauc sub() un gsub() aizvietošanas operācijas — vienas no biežāk lietotajām awk funkcijām. Arī tā pārraksta kaudzes metadatus un avarē programmu, taču skar tikai 32 bitu būvējumus.

Kāpēc “lokāls” nenozīmē “nekaitīgs”

Visu četru CVSS vektors sākas ar AV:L — lokāls uzbrukuma vektors. Pēc pirmā skatiena tas izklausās mierinoši: uzbrucējam it kā jau jābūt uz mašīnas. Praksē ar gawk tas nozīmē ko citu. Uzbrukuma “vektors” ir dati, ko gawk apstrādā, nevis tīkla savienojums. Ja tavs skripts padod gawk failu vai plūsmu, ko satur kāds cits, tad šis “kāds cits” kontrolē ievadi, pat ja pats nekad nepieskaras serverim.

Klasiskais piemērs ir žurnālu apstrāde. Uzbrucējs, kas raksta ļaunu rindu tīmekļa servera žurnālā caur User-Agent galveni vai URL, iestāda datus, kurus vēlāk lasīs kāds gawk skripts nakts atskaitē. Cita tipiska vieta ir CI konveijeri, kur gawk parsē būvēšanas izvadi vai testu rezultātus no ārējiem avotiem. Šajos gadījumos avārija nozīmē salauztu atskaiti vai apturētu konveijeru, un CVE-2026-40553 gadījumā teorētiski arī sliktāku iznākumu.

Ko darīt

Vienkāršs solis ir atjaunināt uz gawk 5.4.1. Lielākajos distributīvos labojums ienāks caur pakotņu atjauninājumiem; kas būvē gawk pats vai izmanto vecāku versiju konteineros, to jāpaceļ manuāli. Pārbaudi versiju ar gawk --version.

Otrs solis attiecas uz skriptiem, kas apstrādā svešus datus. Vērts saprast, no kurienes ievade nāk katram gawk izsaukumam produkcijā, un vai kāds ārpusē var to ietekmēt. CVE-2026-40469 tikai 32 bitu būvējumu ierobežojums arī atgādina, ka vecas 32 bitu iekārtas un iegultās sistēmas šeit ir riskantākas nekā mūsdienu 64 bitu serveri.

AFINE pētnieki visas četras kļūdas atrada un pieteica caur CERT Polska koordinēto procesu, un labojums 5.4.1 bija pieejams atklāšanas dienā, 13. jūlijā. Trīs kļūdu tipi — use-after-free, veselo skaitļu pārpilde un steka pārpilde — vienā rīkā rāda, cik daudz neapskatītas atmiņas apstrādes koda joprojām ir C valodā rakstītajās Unix pamatutilītās.

Avoti

komentārisaruna

Komentāri

Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.

Pievieno komentāru

Tavs e-pasts netiks publicēts. Obligātie lauki atzīmēti.

vēl no drošībasaistītie