Schlimme Fehler in CreateProcessWithLogonW
Der Christian schreibt eine Bibliothek zum Ausführen mit administrativen Rechten unter Delphi. Er hat mich mit der Nase in zwei Probleme gestukt, die Microsoft selbst verursacht.
Startet man einen Prozess mit CreateProcessWithLogonW, wird er bei der Abmeldung des Benutzers vom Dienst „Sekundäre Anmeldung“ auch beendet.
So weit, ok.
Nur erstens benutzt der Dienst „Sekundäre Anmeldung“ TerminateProcess(), um alle mit CreateProcessWithLogonW gestarteten Prozesse zu beenden. Das ist schon ziemlich übel, denn die Programme können so weder temporär angelegte Dateien löschen, noch fragen, ob der Benutzer vor der Abmeldung geänderte Daten speichern will. Die Prozesse werden aus dem Speicher entladen und Schluss.
Viel schlimmer ist, wenn man den Dienst „Sekundäre Anmeldung“ beendet bzw. neu startet. Dann bleiben bei der Abmeldung des Benutzers alle mit CreateProcessWithLogonW gestarteten Prozesse offen. Meldet sich danach ein Gast am System an, sieht der dann die noch laufenden Prozesse! Das kann man mit von SuRun gestarteten Prozessen sehr leicht nachvollziehen!
Oh Mann!
Schlimm genug, dass Microsoft ein RunAs zur Verfügung stellt, dem man mit Gastrechten Administratorenkennwörter entlocken kann. Aber jetzt auch noch das! Wie immer: Wenn man will, dass es wirklich funktioniert, muss man es selbst machen.
WindowStations und Desktops existieren in Windows NT seit Anbeginn, Zugriffskontrollisten auch. SuRun könnte völlig überflüssig sein, schon in Windows NT 3. Warum baut einer der reichsten Softwarekonzerne gerade bei der Sicherheit immer wieder so einen Bockmist?
Ich werde SuRun auf LSALogonUser umstricken. Hoffentlich ist da kein Bug drin!
Wenigstens braucht SuRun mit LSALogonUser den Benutzer nicht mehr in die Administratorengruppe eintragen. Der Start des Benutzerprozesses der den gehobenen Prozess startet fällt dann auch weg. Allerdings muss SuRun alle gestarteten Prozesse bei der Abmeldung des Benutzers selbst beenden… Irgend was ist immer!