Konec leta 2022 so med čiščenjem v računalniškem središču Univerze v Utahu našli arhivski magnetski trak s kodo operacijskega sistema UNIXv4, ki je bila razvita leta 1973 za računalnik PDP-11/45 in je veljala za izgubljeno. UNIXv4 je nadaljeval razvoj predhodne različice UNIXv3, ki je prvič uporabila programski jezik C in brezimenčne cevi. Edinstvenost UNIXv4 je bila v prepisovanju jedra z assemblerja v programski jezik C. Kodo jedra UNIXv4 je napisal Ken Thompson, gonilnike pa Dennis Ritchie.
Konec decembra 2025 so zaposleni v muzeju zgodovine računalniške tehnike uspeli najti potrebno opremo in pridobiti arhiv, shranjen na traku. Za digitalizacijo analognega signala, posnetega na traku, je bil uporabljen pripomoček readtape, za dekodiranje formata arhiva pa so bili vključeni prispevki, ustvarjeni med obnovo arhiva z implementacijo urejevalnika Emacs Jamesa Goslinga.
Poleg kode UNIXv4 je na traku najdemo tudi izvorne kode enega prvih prevajalnikov za jezik C in interpreterja jezika SNOBOL. Kasneje je bila koda UNIXv4 očiščena in objavljena na GitHubu v obliki, primerni za sestavljanje in zagon v simulatorju PDP-11. Koda UNIXv4 obsega 61 tisoč vrstic, od katerih je 27 tisoč v jeziku C, 33 tisoč v asemblerju za PDP-11 in okoli tisoč v naslovnih datotekah.

Eden od raziskovalcev varnosti je opazil orodje „su“, ki je bilo vključeno v UNIXv4. To orodje je vsebovalo manj kot 50 vrstic kode, nameščeno z oznako setuid-root in je omogočilo zagon /bin/sh s pravicami root ob vnosu pravilnega gesla. Koda je vsebovala ranljivost, ki je povzročila prelivanje pomnilnika zaradi kopiranja gesla uporabnika v fiksno 100-znakovno matriko brez preverjanja velikosti vnosnih podatkov.
93-летnji Daglas Mekilrojd (Douglas McIlroy), koji je bio deo tima originalnih razvijača Uniksa u Bell Labs, komentarisao je uočeni problem, predložio koncept nenamenskih kanala i stvorio alate kao što su echo, spell, diff, sort, join i tr. Prema rečima Daglasa, pre nego što se uoči crv Moris 1988. godine, malo je ko obraćao pažnju na prelivanje bafera. Dodavanje provera veličine unetih podataka smatrano je suvišnim kodom, a neuspelo završavanje pri prelivanju doživljavalo se kao nepraktičan način reagovanja na pogrešne ulaze. Tokom vremena, prelivanja koja su se javljala prilikom obrade automatski generisanih nizova počela su da se ispravljaju, ali za ručni unos logika je bila na nivou "kome bi moglo zatrebati da ručno unosi preduge nizove."
Izvor: opennet.ru
