Hono komanda 23. jūnijā izlaida versiju 4.12.27, kas vienā laidienā aizver piecas drošības kļūdas. Smagākā no tām skar servera puses renderēšanu: async JSX komponente pēc await varēja nolasīt konteksta vērtību, kas pieder citam pieprasījumam, kurš tobrīd apstrādājas paralēli. Praksē tas nozīmē, ka viens lietotājs SSR laikā varēja saņemt otra lietotāja datus vai autorizācijas pārbaudi pret nepareizo pieprasījumu. CVE numuri publiskoti tikai 8. jūlijā, tāpēc daļa projektu par problēmu uzzināja pagājušajā nedēļā.
Hono ir viegls web ietvars, kas darbojas jebkurā JavaScript izpildvidē — Cloudflare Workers, Deno, Bun, Node.js un AWS Lambda. Kļūda skar moduļus hono/jsx un hono/jsx-renderer versijās no 4.11.8 līdz 4.12.26. Labojums ir 4.12.27.
Kā konteksts nonāca pie sveša pieprasījuma
JavaScript izpildās vienā pavedienā, bet asinhroni. Kad komponente izpildē sasniedz await, izpildvide atdod vadību un var sākt apstrādāt nākamo ienākošo pieprasījumu. Ja konteksta vērtība — tā, ko iestata createContext un nolasa useContext, jsxRenderer vai useRequestContext — glabājas procesa līmeņa mainīgajā, nevis piesaistīta konkrētam pieprasījumam, tad paralēlais pieprasījums to pārraksta. Kad pirmā komponente atgriežas no await un turpina renderēšanu, tā nolasa jau nomainīto vērtību.
SSR laikā konteksts tika glabāts procesa mērogā, nevis katram pieprasījumam atsevišķi, tāpēc
useContext()vaiuseRequestContext()izsaukums pēcawaitasync komponentē varēja atgriezt cita vienlaicīga pieprasījuma vērtību.
Uzbrukumam nav vajadzīga īpaša piekļuve, bet tam ir liela sarežģītība: rezultāts atkarīgs no tā, cik precīzi divi pieprasījumi pārklājas laikā. Tieši tāpēc CVE-2026-59896 saņēma CVSS vērtējumu 6.5 ar augstu ietekmi uz konfidencialitāti, bet zemu integritātes risku. Klasifikācija — CWE-362, sacensību stāvoklis (race condition). Iekšēji ietvars tagad konteksta glabāšanai izmanto pieprasījumam piesaistītu mehānismu, tāpēc paralēli pieprasījumi vairs nedala vienu mainīgo.
Vēl četras kļūdas tajā pašā laidienā
Tas pats 4.12.27 laidiens aizver vēl vairākas problēmas. Funkcija cx() modulī hono/css savu apvienoto klases nosaukumu atzīmēja kā jau eskeipotu, bet pašu ievadi neeskeipoja. Ja klases nosaukumā nokļuva neuzticama vērtība, tā SSR laikā varēja izlauzties no class atribūta un ievietot HTML — tas ir XSS.
CORS starpprogrammatūrā bija atsevišķa kļūda. Ja iestatīja credentials: true bez skaidra origin, ietvars atspoguļoja pieprasījuma Origin galveni un vienlaikus sūtīja Access-Control-Allow-Credentials: true. Rezultātā jebkura vietne, ko apmeklēja pieteicies lietotājs, varēja veikt kredenciālus saturošus pieprasījumus un nolasīt atbildes no galapunktiem, kas autentificējas ar sīkdatnēm.
Trešā problēma bija pieprasījuma izmēra ierobežojuma apiešana. Pieprasījums tika būvēts ar klienta deklarēto Content-Length, kamēr saturs pilnībā ielādējās buferī. Klients varēja norādīt mazu Content-Length un nosūtīt daudz lielāku ķermeni, kas paslīdēja garām konfigurētajam izmēra limitam.
API Gateway galvenes pazuda ar substring salīdzinājumu
Otrs CVE skar AWS Lambda adapteri. CVE-2026-59897 apraksta, ka API Gateway v1 un VPC Lattice adapteris galvenes vērtības atkārtojumu likvidēšanai izmantoja substring salīdzinājumu, nevis precīzu atbilstību. Ja vienā galvenē bija vairākas vērtības, no kurām viena ir otras apakšvirkne, adapteris nomaina īsāko. Praktisks piemērs: kad klātesoša ir 203.0.113.10, tiek atmesta 203.0.113.1.
Tas bojā jebkuru loģiku, kas paļaujas uz pilnu X-Forwarded-For ķēdi — proxy ķēdes validāciju, ātruma ierobežošanu un audita žurnālus. IP balstīta piekļuves kontrole var izlaist adresi, kurai vajadzēja tikt bloķētai, vai reģistrēt nepareizu izcelsmi. Kļūda pastāvēja kopš versijas 4.3.3, tātad vairāk nekā gadu, un tās CVSS ir 4.8, klasifikācija CWE-348 (mazāk uzticama avota izmantošana).
Ko darīt tagad
Hono autori iesaka jaunināt visiem, kas izmanto JWT palīgu, hono/jsx vai Cache starpprogrammatūru. Ja tavā projektā ir async JSX komponentes ar SSR, jauninājums uz 4.12.27 vai jaunāku ir vienīgais pilnais labojums — kļūdu nevar apiet ar konfigurāciju, jo problēma bija pašā konteksta glabāšanā.
Pārbaudi arī atkarību koku: daudzi projekti Hono ievelk netieši caur citām paketēm. Dependabot pieprasījumi jau ceļ versiju līdz 4.12.27 un 4.12.28, tāpēc atkarību audits parādīs, vai kāda transitīva pakete vēl tur veco versiju. Ražošanā, kur SSR apkalpo daudz vienlaicīgu pieprasījumu, konteksta noplūde ir tieši tas gadījums, kur reproducēšana testā ir grūta, bet slodzē — iespējama.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.