Am Samstag, den 08.01.2005, 13:05 +0100 schrieb Jan Trippler:
Am Freitag, 7. Januar 2005 23:58 schrieb Werner Schalk:
Euch ist schon klar, dass das Programm ne astreine root-Vulnerability enthält, oder?
char bigpointer[1024];
int main (int argc, char *argv[]) { int i;
strcat (bigpointer, "/sbin/rcnetwork restart ");
Schon das hier ist gefährlich. Du kannst nicht davon ausgehen, dass bigpointer mit 0 initialisiert ist (beim gcc mags funktionieren, aber das ist keineswegs ein Fakt auf den man sich verlassen darf).
Besser strcpy (noch besser strncpy, hier kann man drauf verzichten, weil die Längen vom Puffer und vom char* bekannt sind).
for (i=1;i<argc;i++) { strcat (bigpointer, argv[i]); strcat (bigpointer, " "); } setuid(0); setreuid(0,0); system (bigpointer); exit(0); }
Der Puffer für bigpointer wird überlaufen, wenn die Anzahl der Kommandozeilenparameter >1024 ist (ab ca. 1090) und schon gibts nen Buffer Overflow. Mit suid-Berechtigung ist das der perfekte lokale root-Exploit. Danke.
Und das ist noch das kleinere Übel (dem man mit sauberer Längenprüfung begegnen kann). Aber man kann das Ding viel einfacher ausnutzen: Rufe das Programm doch mal so auf: programm parameter1 ; rm -rf /
Da keinerlei Prüfungen der Argumente durchgeführt werden, führt der system()-call einfach die Kommandos /sbin/rcnetwork restart parameter1; rm -rf / nacheinander aus. Ein Abfangen solcher (und anderer) Übel ist deutlich aufwändiger.
Mit: programm parameter1 ; /bin/bash hast Du gleich ne root-Shell.
Ich habe den Thread nicht verfolgt, aber sudo ist doch sicher schon genannt worden, oder?
Jan Ja, wurde vorgeschlagen. Jetzt muß ich mich wieder als Newbee bezeichnen, was ich wahrscheinlich auch noch bin. Von dem was in dem oberen Textteil steht, habe ich nur die Hälfte verstanden. Also ich habe das Programm, so wie in der Anleitung des Kollegen beschrieben, gebaut. Es funktionert auch. Die Probleme welche sich daraus ergeben, sind für mich als Newbee nicht ganz verständlich. Vieleicht könnt Ihr mir, in für Newbees vertändlichem Format, erklären was genau passieren kann, wenn ich das Netzwerk mit dem oben genannten Proggi starte. Aber ich werde es auch mit Sudo versuchen, wenn dies sicherer ist. Gruß Roger
-- Linux-Quickies: http://www.jan-trippler.de PingoS: http://www.pingos.org