Przywrócono kod UNIXv4, pierwszego systemu operacyjnego z jądrem napisanym w języku C. Luka w UNIXv4

Pod koniec ubiegłego roku podczas sprzątania w centrum obliczeniowym Uniwersytetu Utah odkryto archiwalną taśmę magnetyczną zawierającą kod systemu operacyjnego UNIXv4, który został opracowany w 1973 roku dla komputerów PDP-11/45 i uważano go za utracony. UNIXv4 kontynuował rozwój wydanego rok wcześniej systemu operacyjnego UNIXv3, w którym po raz pierwszy zastosowano język C i nienazwane kanały. Cechą charakterystyczną UNIXv4 była przebudowa jądra z asemblera na język C. Kod jądra UNIXv4 został napisany przez Kena Thompsona, a sterowniki — przez Dennisa Ritchie.

Pod koniec grudnia 2025 roku pracownicy muzeum historii techniki komputerowej zdołali znaleźć niezbędne urządzenie i odzyskać dane zapisane na taśmie. Do cyfryzacji zapisanego na taśmie sygnału analogowego użyto narzędzi readtape, a do dekodowania formatu archiwum wykorzystano opracowania stworzone w procesie przywracania archiwum przy implementacji edytora Emacs autorstwa Jamesa Goslinga.

Oprócz kodu UNIXv4 na taśmie znaleziono również źródłowe teksty jednego z pierwszych kompilatorów dla języka C oraz interpreter języka SNOBOL. Później kod UNIXv4 został uporządkowany i opublikowany na GitHubie w formie odpowiedniej do kompilacji i uruchomienia w symulatorze PDP-11. Kod UNIXv4 zawiera 61 tysięcy linii, z czego 27 tysięcy w języku C, 33 tysiące w asemblerze dla PDP-11 i około tysiąca — pliki nagłówkowe.

Przywrócono kod UNIXv4, pierwszego systemu operacyjnego z jądrem napisanym w języku C. Luka w UNIXv4

Jeden z badaczy bezpieczeństwa zwrócił uwagę na narzędzie „su”, dostarczane w UNIXv4. Narzędzie to zawierało mniej niż 50 linii kodu, było instalowane z flagą setuid-root i pozwalało uruchomić /bin/sh z uprawnieniami root po wprowadzeniu poprawnego hasła. Kod zawierał lukę prowadzącą do przepełnienia bufora z powodu kopiowania wprowadzonego przez użytkownika hasła do stałej tablicy o długości 100 znaków bez sprawdzenia rozmiaru wprowadzanych danych.

Problematykę poruszył 93-letni Douglas McIlroy, członek zespołu oryginalnych deweloperów Unix w Bell Labs, który zaproponował koncepcję kanałów bez nazw oraz stworzył narzędzia takie jak echo, spell, diff, sort, join i tr. Według Douglasa, przed pojawieniem się robaka Morrisa w 1988 roku, niewielu zwracało uwagę na przepełnienia buforów. Dodawanie sprawdzeń rozmiaru danych wprowadzanych ręcznie traktowano jako zbędny kod, a awaryjne zakończenie w przypadku przepełnienia postrzegano jako niezgrabną formę reakcji na niepoprawne dane wejściowe. Z czasem przepełnienia powstające podczas przetwarzania automatycznie generowanych ciągów zaczęto naprawiać, ale w przypadku ręcznego wprowadzania logika była na poziomie 'kto mógłby potrzebować ręcznie wprowadzać zbyt długie ciągi'.

Źródło: opennet.ru

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster