Kód pro UNIXv4, první operační systém s jádrem v jazyce C, byl obnoven. Zranitelnost v systému UNIXv4

Koncem loňského roku, během úklidu datového centra Univerzity v Utahu, byla objevena archivovaná magnetická páska obsahující kód operačního systému UNIXv4. Systém byl vyvinut v roce 1973 pro PDP-11/45 a byl považován za ztracený. UNIXv4 navazoval na vývoj systému UNIXv3, vydaného o rok dříve, který byl průkopníkem v používání jazyka C a nepojmenovaných rour. Charakteristickým rysem systému UNIXv4 bylo přepsání jádra z assemblerového jazyka do jazyka C. Kód jádra systému UNIXv4 napsal Ken Thompson a ovladače Dennis Ritchie.

Na konci prosince 2025 se pracovníkům Muzea historie informatiky podařilo najít potřebné vybavení a získat archiv uložený na pásce. K digitalizaci analogového signálu nahraného na pásku byl použit nástroj readtape a k dekódování formátu archivu byly použity vývojové postupy vyvinuté během procesu obnovy archivu s implementací editoru Emacs od Jamese Goslinga.

Kromě kódu pro UNIXv4 kazeta obsahovala také zdrojový kód jednoho z prvních kompilátorů jazyka C a interpret jazyka SNOBOL. Kód pro UNIXv4 byl později upraven a publikován na GitHubu ve formě vhodné pro kompilaci a spuštění na simulátoru PDP-11. Kód pro UNIXv4 obsahuje 61 000 řádků, z nichž 27 000 je v jazyce C, 33 000 v assembleru PDP-11 a asi 1 000 jsou hlavičkové soubory.

 Kód pro UNIXv4, první operační systém s jádrem v jazyce C, byl obnoven. Zranitelnost v systému UNIXv4

Bezpečnostní výzkumník si všiml utility „su“, která byla součástí systému UNIXv4. Tato utilita se skládala z méně než 50 řádků kódu, byla nainstalována s příznakem setuid-root a umožňovala spuštění /bin/sh s oprávněními root po zadání správného hesla. Kód obsahoval zranitelnost, která vedla k přetečení vyrovnávací paměti zkopírováním uživatelem zadaného hesla do pevného pole o délce 100 znaků bez ověření délky vstupu.

Problém komentoval 93letý Douglas McIlroy, člen původního vývojového týmu Unixu v Bell Labs, který navrhl koncept nepojmenovaných rour a vytvořil utility jako echo, spell, diff, sort, join a tr. Podle McIlroye předtím, než se v roce 1988 objevil červ Morris, jen málokdo věnoval pozornost přetečení vyrovnávací paměti. Přidávání kontrol velikosti k ručně zadávaným datům bylo považováno za zbytečný kód a pád při přetečení byl vnímán jako neohrabaný způsob, jak zvládnout neplatný vstup. Postupem času byla přetečení, ke kterým docházelo při zpracování automaticky generovaných řetězců, opravena, ale u ručního zadávání byla logika na úrovni „kdo by chtěl ručně zadávat velmi dlouhé řetězce?“.

Zdroj: opennet.ru

Kupte si spolehlivý hosting pro stránky s DDoS ochranou, VPS VDS servery 🔥 Kupte si spolehlivý webhosting s ochranou DDoS, VPS VDS servery | ProHoster