drošība · 6 min · 11.09.2026

Šablona repozitorijs izpilda kodu Forgejo serverī: Gitea to pašu aizvēra februārī

Forgejo 10. septembrī izdeva versijas 16.0.4 un 15.0.8. Abos laidienos ir labojums kļūdai, kuras CVSS vērtējums ir 9,9 no 10. Parastam kontam, kas drīkst izveidot repozitoriju, pietiek ar vienu klikšķi uz sveša šablona, lai uz servera sāktu darboties uzbrucēja izvēlēts process.

Kļūda reģistrēta kā CVE-2026-89094. NVD to publicēja 10. septembrī plkst. 21:17 UTC ar vektoru AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H. Burti PR:L nozīmē, ka uzbrucējam pietiek ar parastu lietotāja kontu. Instancēs ar atvērtu reģistrāciju tādu iegūst vienā minūtē.

Kā šablons aizsniedzas līdz servera procesiem

Skartas ir visas versijas līdz 16.0.3 ieskaitot, kā arī LTS zars līdz 15.0.7. Šablonu funkcija Forgejo ir ieslēgta pēc noklusējuma. Repozitoriju par šablonu padara viena izvēles rūtiņa tā iestatījumos, pēc kuras citi lietotāji saraksta izveides logā to redz kā gatavu pamatu. Publiskā instancē uzbrucējam nekas nav jāpārliecina: viņš izveido savu šablonu un gaida, kad kāds to izmantos. Ar to pietiek, lai kods sāktu darboties.

Šablonu repozitorijs Forgejo darbojas četros soļos. Serveris nokopē šablonu. No kopijas izdzēš mapi .git. Failos, kas uzskaitīti .forgejo/template, aizstāj mainīgos. Visbeidzot palaiž git init.

Trešais solis bija bez sardzes. Mainīgo aizstāšana raksta failus tur, kur norāda šablons. Tātad šablons varēja uzrakstīt jaunu mapi .git ar savu config failu. Kad ceturtais solis izsauca git init, git šo mapi atrada un pieņēma par savējo.

Git konfigurācijā var norādīt ceļus uz izpildāmiem failiem, piemēram, ar core.hooksPath. Tālāk viss notiek ar Forgejo servisa konta tiesībām. Projekta paziņojumā formulējums ir tiešs.

Ļaunprātīgu šablona repozitoriju varēja izmantot, lai nolasītu patvaļīgus datus no Forgejo servera un izpildītu uz tā patvaļīgus procesus.

Labojums ir īss. Pēc mainīgo aizstāšanas Forgejo mapi .git izdzēš vēlreiz. Tikai pēc tam palaiž git init.

No pieteikuma līdz laidienam pagāja nepilna diena

Kļūdu atrada un pieteica lietotājs ar segvārdu 0xLE. Labojumu uzrakstīja Mathieu Fenniak. Izmaiņu kopa 14301 pievieno 181 rindu, izmet 8 rindas un skar 9 failus. Tā parādījās 9. septembrī plkst. 14:51 un tika iekļauta nākamajā rītā plkst. 06:31. Laidiens iznāca tās pašas dienas pēcpusdienā plkst. 14:30.

Forgejo neizmanto atsevišķu drošības zaru. Kritiskais labojums ceļoja kopā ar parastajiem kļūdu labojumiem tajā pašā partijā. Tajā pašā izmaiņu kopā ir arī labojums tam, ka organizācijas komanda ar iestatījumu admin saņēma owner tiesības pār saistītajiem repozitorijiem.

Gitea to pašu klasi aizvēra februārī

Forgejo ir Gitea atzarojums. Šablonu apstrādes kods abos projektos nāk no viena pirmavota. Gitea tieši tādu pašu tīrīšanu ieviesa izmaiņu kopā 36734, kas tika iekļauta 2026. gada 25. februārī. Tā pievienoja 228 rindas, izmeta 79 rindas un skāra četrus failus. Komentārā pie tās rakstīts vienkārši: tiek dzēsta visa .git mape, ko šablona kopija varēja izveidot.

Starp abiem labojumiem pagāja seši ar pusi mēneši. Šajā laikā Gitea pusē pati bāze saņēma vēl vairākas šāda tipa kļūdas. Augustā CISA savā aktīvi izmantoto ievainojamību katalogā iekļāva Gitea kļūdu CVE-2026-60004, kur repozitorija rakstītājs varēja ielikt git āķi un palaist čaulas komandas.

Divi CVE un viens labojums bez numura

Tajā pašā laidienā aizvērta arī otra kļūda. CVE-2026-89151 ar vērtējumu 3,5 ļāva API žetonam ar ierobežotām tiesībām aizsniegties tālāk, nekā tam atļauts. Vainīga bija atsevišķa pārbaude, kas uzturētājiem ļauj labot svešus zarus, kad atvērtajam izmaiņu pieprasījumam ieslēgta opcija allow maintainer edit. Šī pārbaude nerēķinājās ar API līmeņa ierobežojumiem, tāpēc repozitorijam piesaistīts žetons varēja rakstīt ārpus savas robežas. NVD to publicēja 11. septembrī plkst. 03:16 UTC.

Laidienā ir vēl viens drošības labojums, kam CVE numura nav. Lietotājs ar tikai lasīšanas tiesībām varēja iegūt melnraksta laidienu pielikumu metadatus un pilnu saturu. Galapunkts GetReleaseAttachment un tīmekļa lejupielādes ceļš ServeAttachment nepārbaudīja, vai laidiens ir melnraksts, kaut gan GetRelease to dara jau sen. Neautentificēts apmeklētājs to varēja izmantot publiskos repozitorijos. Gitea tādu pašu kļūdu aizvēra ar CVE-2026-27660.

Tajā pašā partijā Forgejo pievilka arī bibliotēkas. Zarā 16.0 atjaunināta golang.org/x/crypto uz v0.56.0 un google.golang.org/grpc uz v1.83.1. Abas izmaiņas apzīmētas ar birku SECURITY. Zarā 15.0 tam pašam pievienojas svgo v4.1.0. Turpat 15.0.8 valodas direktīva pacelta uz go1.26.

Publiskās instances versiju rāda pašas

Forgejo versiju var nolasīt bez pieteikšanās. Galapunkts /api/v1/version to atdod jebkuram apmeklētājam. 11. septembrī, aptuveni 20 stundas pēc laidiena, itn pārbaudīja septiņas publiskas Forgejo instances. Divas jau rādīja 16.0.4. Četras rādīja 16.0.3, 15.0.6, 15.0.2 vai 15.0.1. Codeberg rāda pašbūvētu 16.0.0-dev versiju ar 741 komitu virs bāzes.

Atbalsta logi abiem zariem atšķiras. LTS versiju 15.0.8 Forgejo atbalsta līdz 2027. gada 15. jūlijam. Stabilo 16.0.4 atbalsta tikai līdz 2026. gada 29. oktobrim, tātad septiņas nedēļas no šodienas. Kas paliek uz 16.0.x, tam līdz oktobra beigām būs jāpārceļas uz 16.1 zaru.

Uzbrukumus pagaidām neviens nav fiksējis. Toties to pašu /api/v1/version galapunktu, ar kuru versiju pārbaudīja itn, tikpat viegli var nolasīt jebkurš cits.

Titulbildes foto: Kevin Ache / Unsplash.

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