Viena privāta repozitorija klonēšana Radicle tīklā aizsūtīja 3,6 MB datu 1522 paketēs. Neviena no tām nebija šifrēta. Tā savā tehniskajā aprakstā raksta Konstantinos Maninakis, kurš kļūdu atrada jūnijā un ziņoja par to Radicle komandai 24. jūnijā.
Radicle ir decentralizēta koda sadarbības platforma uz Git bāzes. Mezgli paši savā starpā sinhronizē repozitorijus bez centrālā servera. 23. septembrī projekts publicēja oficiālu paziņojumu par divām kritiskām kļūdām tīkla protokolā. Pēc komandas vārdiem ievainojamas ir visas līdz šim izlaistās Radicle versijas. Maninakis min, ka pēdējā pārbaudītā versija ir radicle-node 1.10.3.
Atslēgas bija, šifrēšanas nebija
Radicle mezgli savienojumu sāk ar Noise XK rokasspiedienu. Rokasspiediens strādāja pareizi un sesijas atslēgas tika izveidotas. Problēma radās pēc tam. Failā crates/radicle-node/src/reactor/session.rs bija nosacījums, kas pēc rokasspiediena beigām datus rakstīja tieši savienojumā:
if self.state.is_complete() || !self.session.is_established() { return self.session.write(buf); }
Maninakis skaidro, ka šī loģika nāk no SOCKS5 starpniekservera apstrādes. Tur rokasspiediena beigas nozīmē, ka apstrāde jāpārtrauc. Noise gadījumā tieši no šī brīža visi dati ir jāšifrē. Atslēgas atradās publiskos laukos NoiseState::Active struktūrā, bet neviens tās neizmantoja.
Wireshark un burts “r”
Kļūdu Maninakis pamanīja nejauši. Viņš veido Grove, Radicle mezglu, kas darbojas pārlūkā. Grove viņš uzrakstīja korektu Noise šifrēšanu. Pēc tam viņa mezgls vairs nespēja savienoties ar īstajiem Radicle mezgliem. Wireshark ierakstā pirmais baits pēc rokasspiediena bija ASCII burts “r” no vārda “rad”. Tas nozīmēja, ka otra puse sūta atklātu tekstu.
Viena rad clone ierakstā bija redzams:
- repozitorija metadati un Git objektu identifikatori;
- mezglu adreses, no kurām var salikt tīkla topoloģiju;
- pilns Git pack saturs ar commit vēsturi, laika zīmogiem un SSH parakstiem;
- identitātes dokumenti ar repozitoriju nosaukumiem un aprakstiem;
- patch versijas ar virsrakstiem un aprakstiem.
Otrā kļūda ļauj uzdoties par citu mezglu
12. augustā pētnieks ar segvārdu cryptocode ziņoja par otru problēmu peer autentifikācijā. Radicle paziņojumā tā aprakstīta vienkārši:
Uzbrucējs var pieslēgties jūsu mezglam un uzrādīt Node ID, kas nav viņa paša.
Privātie repozitoriji Radicle ir aizsargāti ar atļauto mezglu sarakstu, kas balstās uz Node ID. Ja Node ID var viltot, saraksts vairs neko neaizsargā. Abas kļūdas kopā dod pilnu uzbrukumu. Uzbrucējs tīkla ceļā starp diviem mezgliem noskatās atklātā tekstā sūtītos Node ID. Vēlāk viņš pieslēdzas ar kāda atļautā mezgla identitāti un lejupielādē visu repozitoriju.
Kļūdas atrodas trešo pušu bibliotēkās, ko Radicle izmanto transportam. Konfidencialitātes problēma reģistrēta netservices.rs pieteikumā #48, autentifikācijas labojums piedāvāts cyphernet.rs pull request #22.
Kas paliek drošs
Radicle komanda uzsver, ka kļūdas ir mezglu transporta slānī. Repozitoriju datu modelis tās neskar. Git objektu pārbaude un parakstītās atsauces glabātuvē strādā kā iepriekš, tāpēc uzbrucējs nevar viltot kodu vai kāda cita identitāti repozitorija vēsturē. Publiskajiem repozitorijiem noplūde praktiski neko nemaina, jo to saturs jau tāpat ir pieejams visiem.
Privātajiem repozitorijiem ieteikumi ir stingri:
- pārtraukt privāto repozitoriju sinhronizāciju tīklā;
- katram privātajam repozitorijam izpildīt
rad block <RID>; - uzskatīt, ka jebkurš agrāk tīklā sūtīts privātais repozitorijs ir kompromitēts. Tajā esošie noslēpumi un piekļuves atslēgas jānomaina.
Tor vai VPN kā papildu šifrēšanas slāni komanda par pietiekamu risinājumu neuzskata. Tas aizsargā pret noklausīšanos ceļā, bet Node ID viltošanu nenovērš.
Trīs mēneši klusuma un jauns transports
No pirmā ziņojuma līdz publiskai atklāšanai pagāja trīs mēneši. LWN norāda, ka šajā laikā iznāca četri Radicle laidieni un neviens no tiem lietotājus par problēmu nebrīdināja. Maninakis raksta, ka embargo periods veidots pēc 2026. gada marta atklāšanas parauga, kad Radicle ziņoja par kļūdu parakstītajās atsaucēs.
Radicle komanda atradumu pārbaudīja pati. Izstrādātāji ierakstīja satiksmi starp saviem parastajiem mezgliem un no nešifrētās plūsmas izvilka Git saturu. Pēc tam viņi apstiprināja Maninakis ziņojumu. Komanda nolēma transportu nomainīt pilnībā, jo arī otrā kļūda atradās tajā pašā slānī. Mazs ielāps Noise kodā autentifikācijas problēmu neatrisinātu.
Ievainojamība skar tos, kas Radicle tīklā glabā privātus repozitorijus. Publisko repozitoriju saturs jau tāpat ir redzams ikvienam, tāpēc to īpašniekiem jārīkojas mazāk. Privāto repozitoriju īpašniekiem tagad jāpieņem, ka viss, kas tīklā pārsūtīts kopš pirmās versijas, var būt nonācis kāda cita rīcībā.
Esošo Noise protokolu Radicle labot neplāno. Paziņojumā teikts, ka pašizveidoto transportu nomainīs iroh, atvērtā koda peer-to-peer tīkla steks uz atvērtiem standartiem. Maninakis precizē, ka tas nozīmē QUIC ar TLS. Izmaiņa nav savietojama ar veco protokolu, tāpēc tā iznāks kā Radicle 2.0. Glabātuves formātu komanda cenšas saglabāt, bet 2.x mezgli ar 1.x mezgliem sazināties nevarēs. Tīkls uz laiku sadalīsies divās daļās.
Radicle 2.0 izlaišanas datums paziņojumā nav minēts.
Komentāri
Šim rakstam vēl nav komentāru. Esi pirmais, kurš dalās ar savu viedokli.