{"id":50045,"date":"2026-08-26T16:38:32","date_gmt":"2026-08-26T14:38:32","guid":{"rendered":"https:\/\/overcentral.com\/de\/?p=50045"},"modified":"2026-08-26T16:38:32","modified_gmt":"2026-08-26T14:38:32","slug":"windows-11-whesvc-lua-engine-sicherheit-50045","status":"publish","type":"post","link":"https:\/\/overcentral.com\/de\/windows-11-whesvc-lua-engine-sicherheit-50045\/","title":{"rendered":"Windows 11 Dienst whesvc enth\u00e4lt SYSTEM-Lua-Engine mit \u00fcberm\u00e4\u00dfigen Rechten"},"content":{"rendered":"<p><a href=\"https:\/\/overcentral.com\/de\/windows-11-datenschutzeinstellungen-desktop-apps-testen-microsoft-preview-build-26340-9233-granulare-berechtigungen-kamera-mikrofon-standort-privatsphaere-kontrolle-insider-accessibility-fenster-maxim\/\" title=\"Microsoft testet neue Datenschutzeinstellungen f\u00fcr Windows 11 Desktop-Apps\" data-iacss-internal=\"1\">Windows 11<\/a> enth\u00e4lt einen Dienst namens \u201eWindows Health and Optimized Experiences\u201c (<code>whesvc<\/code>codecodecode), der seit 2025 in Canary-Builds gesichtet wird und mittlerweile auf jedem aktuellen Windows 11-System automatisch startet. Eine gr\u00fcndliche Analyse des reverse engineering-Experten Xusheng Li zeigt nun: Der Dienst ist kein Spionagewerkzeug, wie k\u00fcrzlich in sozialen Medien behauptet wurde \u2013 doch die darin verbaute SYSTEM-Lua-Engine besitzt F\u00e4higkeiten, die weit \u00fcber das f\u00fcr Diagnoseaufgaben Notwendige hinausgehen und bereits zu einer best\u00e4tigten Sicherheitsl\u00fccke (CVE-2025-59241) gef\u00fchrt haben.<\/p>\n<h2>\u201eDatenversand alle 15 Minuten\u201c war falsch \u2013 doch niemand hatte den Code ge\u00f6ffnet<\/h2>\n<p>Ende <a href=\"https:\/\/overcentral.com\/de\/spiele-juli-2026-highlights\/\" title=\"Die wichtigsten Spiele im Juli 2026: Diese Titel sind Pflicht\" data-iacss-internal=\"1\">Juli 2026<\/a> verbreitete ein Nutzer auf der Plattform X die Behauptung, <code>whesvc<\/code>codecodecode sende alle 15 Minuten CPU-Temperatur- und Akkudaten an Microsoft. Der Beitrag erreichte \u00fcber 95.000 Aufrufe. Scott Hanselman, Vice President bei Microsoft, widersprach \u00f6ffentlich und erkl\u00e4rte, der Dienst zeichne lediglich lokale Diagnose-Trace-Daten auf, wenn das System langsamer werde. Eine \u00dcbertragung an Microsoft erfolge nur, wenn der Nutzer diese Daten \u00fcber den Feedback Hub freigebe. Mehrere Medien ver\u00f6ffentlichten daraufhin Faktenchecks, und die Welle ebbte ab.<\/p>\n<p>Doch f\u00fcr Xusheng Li, einen Reverse Engineer und Vulnerability Researcher, der unter anderem Debugger-Entwicklung bei Vector 35 (Binary Ninja) leitet, blieb ein entscheidender Punkt offen. Wie er in seinem am 16. August ver\u00f6ffentlichten Analysebericht und dem dazugeh\u00f6rigen <a href=\"https:\/\/github.com\/\" target=\"_blank\" rel=\"noopener noreferrer\" data-iacss-external=\"1\">GitHub-Repository<\/a> klarstellt: Niemand hatte die Bin\u00e4rdatei selbst gepr\u00fcft. Die Berichte st\u00fctzten sich allein auf Hanselmans Aussage, nicht auf den tats\u00e4chlichen Code. Also analysierte Li s\u00e4mtliche Komponenten des Dienstes \u2013 mit aufschlussreichen Ergebnissen, die weit \u00fcber die Widerlegung der Falschmeldung hinausgehen.<\/p>\n<h2>Eine in SYSTEM-Rechten laufende Lua-Umgebung<\/h2>\n<p>Der Dienst <code>whesvc<\/code>codecodecode selbst ist mit 229 Kilobyte klein. Die Kernlogik steckt in der mitgelieferten Bibliothek <code>windiag.dll<\/code>codecodecode (946 Kilobyte), die einen vollst\u00e4ndigen Lua 5.4.7-Interpreter enth\u00e4lt. Lua ist bekannt als leichtgewichtige Skriptsprache f\u00fcr Spiele und Embedded-Systeme \u2013 ihr Einsatz in einem Windows-Systemdienst ist ungew\u00f6hnlich.<\/p>\n<p>Die dritte Komponente, <code>whesvc_assets.dll<\/code>codecodecode, enth\u00e4lt keinen ausf\u00fchrbaren Code, keinen <code>.text<\/code>codecodecode-Abschnitt und keine Debug-Symbole. Stattdessen sind in ihren Ressourcen <strong>84 vorkompilierte Lua-Skripte<\/strong> abgelegt. Ihre Dateinamen lassen die Funktion erahnen: Sie reichen von der Erkennung von H\u00e4ngern \u00fcber die Aufzeichnung langsamer Startvorg\u00e4nge bis hin zur Bewertung von L\u00fcfterger\u00e4uschen und der Erkennung von Speicherlecks. Das entscheidende Detail: Der gesamte Dienst, inklusive des Lua-Interpreters, l\u00e4uft mit den h\u00f6chsten Windows-Rechten, dem SYSTEM-Konto.<\/p>\n<h2>79 native Funktionen \u2013 die \u201eMachtf\u00fclle\u201c der Engine<\/h2>\n<p>F\u00fcr die Bewertung einer Skript-Engine ist die Frage entscheidend, welche F\u00e4higkeiten den Skripten \u00fcber die Schnittstelle zur Verf\u00fcgung gestellt werden. Wie Xusheng Li in seiner Analyse feststellt, k\u00f6nnen die 84 Skripte auf einen globalen Namensraum <code>wdg<\/code>codecodecode zugreifen, der nicht weniger als <strong>79 native Funktionen<\/strong> exponiert. Die Liste der Funktionen liest sich wie das Repertoire einer vollwertigen Systemverwaltungssprache:<\/p>\n<ul>\n<li>Lesen und Schreiben von Registry-Schl\u00fcsseln<\/li>\n<li>Beliebige Dateioperationen (ohne Pfadrestriktionen oder Whitelist-Pr\u00fcfung)<\/li>\n<li>Erzeugen von Prozessen (z.\u202fB. Ausf\u00fchren von Programmen)<\/li>\n<li>Aufruf von WMI-Methoden (Windows Management Instrumentation)<\/li>\n<li>Steuerung von ETW-Traces (Event Tracing for Windows)<\/li>\n<li>Pr\u00fcfung von Sicherheitstoken<\/li>\n<li>Abruf von Energie- und Temperaturinformationen<\/li>\n<li>Herunterladen von Debug-Symbolen<\/li>\n<li>Erstellung von CAB-Dateien<\/li>\n<li>Durchf\u00fchren von HTTP-Anfragen<\/li>\n<li>Ein generisches FFI (Foreign Function Interface) zum Aufruf nativer Funktionen aus beliebigen DLLs<\/li>\n<\/ul>\n<p>Besonders bezeichnend ist die <code>write_data<\/code>codecodecode-Funktion f\u00fcr Dateischreibzugriffe. Sie enth\u00e4lt keinerlei Einschr\u00e4nkung des Pfades, keine Normalisierung, keine \u00dcberpr\u00fcfung auf Verzeichniswechsel. Wie Li feststellt, ruft sie schlicht die Standard-C-Funktion <code>fopen<\/code>codecodecode auf \u2013 dieselbe, die auch das Lua-Standard-I\/O nutzt. Die Begrenzung liegt nicht in der Technik, sondern ausschlie\u00dflich in den mitgelieferten Skripten selbst.<\/p>\n<h2>Ausgelieferte Skripte: \u201eLangweilig legitim\u201c<\/h2>\n<p>Trotz dieser enormen theoretischen Machtf\u00fclle zeigt Lis detaillierte Untersuchung aller 84 Skripte: Sie verhalten sich musterg\u00fcltig. Kein einziges Skript f\u00fchrt verd\u00e4chtige Aktionen aus.<\/p>\n<p>Dateioperationen dienen lediglich dazu, tempor\u00e4re JSON-Zusammenfassungen (<code>system_summary<\/code>codecodecode) zu erstellen, die dann vom Skript <code>artifact_manager<\/code>codecodecode unter <code>%ProgramData%\\Whesvc\\<\/code>codecodecode archiviert und mit einer Lebensdauer versehen werden. Registry-Zugriffe beschr\u00e4nken sich fast ausschlie\u00dflich auf das Fortschreiben eigener Z\u00e4hler \u00fcber Neustarts hinweg. Die einzige Ausnahme ist das Skript zur Konfiguration des Driver Verifiers \u2013 ein Vorgang, der zus\u00e4tzlich durch Umgebungsvariablen abgesichert ist. Prozesse werden nur an einer einzigen Stelle gestartet: <code>powercfg.exe<\/code>codecodecode zur Abfrage von Schlafberichten. Die mysteri\u00f6sen \u201e15 Minuten\u201c entsprechen dem Wert <code>WINDIAG_SYSTEM_SUMMARY_FLUSH_SEC<\/code>codecodecode (Standard: 900 Sekunden) im <code>system_summary<\/code>codecodecode-Skript. Alle 15 Minuten wird eine kleine Telemetrie-Nachricht geschrieben und eine JSON-Datei aktualisiert. Auf Lis Testrechner enthielt die Datei lediglich die Aufzeichnung eines Absturzes seines eigenen Debuggers.<\/p>\n<p>Netzwerkaktivit\u00e4t findet so gut wie nicht statt. Lediglich eine einzige URL ist in den Skripten hartcodiert: der \u00f6ffentliche Microsoft-Symbolserver (<code>symweb.azurefd.net<\/code>codecodecode). Dieser Download-Mechanismus wird jedoch nur aktiv, wenn die Umgebungsvariable <code>WINDIAG_SYM_CLOUD_TOKEN<\/code>codecodecode gesetzt ist \u2013 was auf Standard-Windows-Systemen nicht der Fall ist. Die DLL <code>windiag.dll<\/code>codecodecode importiert nur drei WinINet-Funktionen und keine Socket-Funktionen. Der aktive Dienst h\u00e4lt zudem keine TCP- oder UDP-Endpunkte offen.<\/p>\n<h2>Wie \u201eL\u00fcfterger\u00e4usche\u201c erkannt werden<\/h2>\n<p>Eine der ersten von Li untersuchten Dateien war das Skript <code>SCENARIO\/NOISY_FAN<\/code>codecodecode \u2013 aus Sorge, der Dienst k\u00f6nnte das Mikrofon anzapfen. Doch weder <code>windiag.dll<\/code>codecodecode noch <code>whesvc.dll<\/code>codecodecode importieren Audio-APIs. Die Erkennung erfolgt indirekt \u00fcber die L\u00fcfterdrehzahl (RPM). Die von den OEMs definierten Schwellenwerte werden in vier Stufen eingeteilt: Low, Medium, MediumHigh und High. Verharrt der Wert zu lange im High-Bereich, wird ein Problembericht erstellt. Die Methode kommt ohne Mikrofon aus \u2013 auf Systemen ohne L\u00fcfterdrehzahl-Telemetrie bricht das Skript sofort ab.<\/p>\n<h2>Das Sicherheitsmodell: Vertrauen auf Dateirechte, nicht auf Sandboxing<\/h2>\n<p>Die aufschlussreichste Erkenntnis der Analyse betrifft die Sicherheitsarchitektur der Lua-Engine. Es existiert eine Art Sandbox: Vor der Skriptausf\u00fchrung werden die globalen Lua-Funktionen <code>debug<\/code>codecodecode, <code>require<\/code>codecodecode, <code>os<\/code>codecodecode, <code>package<\/code>codecodecode, <code>loadfile<\/code>codecodecode, <code>dofile<\/code>codecodecode und <code>load<\/code>codecodecode aus der Umgebung entfernt. Dadurch soll verhindert werden, dass externer, nicht-signierter Code nachgeladen wird. Doch Li bewertet diese Ma\u00dfnahme als \u201eweniger eine Sandbox, eher eine Namensraum-Bereinigung\u201c. Der <code>io<\/code>codecodecode-Namespace ist nicht gesperrt, und die Funktion <code>io.popen<\/code>codecodecode wird sogar bewusst als <code>io_popen<\/code>codecodecode re-exportiert \u2013 etwa um <code>wpr.exe<\/code>codecodecode f\u00fcr ETW-Traces aufzurufen. Kernelemente der Lua-Standardbibliothek werden vor dem L\u00f6schen in Referenzen gesichert; das Skript <code>core\/global<\/code>codecodecode h\u00e4lt eine Upvalue namens <code>sandbox_stripped_refs<\/code>codecodecode. Die Sicherheit h\u00e4ngt also nicht von der Sandbox, sondern von zwei anderen Faktoren ab: den Dateirechten und dem Inhalt der ausgelieferten Skripte.<\/p>\n<p>Die DLL <code>whesvc_assets.dll<\/code>codecodecode ist korrekt signiert, doch der Dienst <strong>pr\u00fcft diese Signatur zur Laufzeit nicht<\/strong>. Es gibt keinen Import von <code>WinVerifyTrust<\/code>codecodecode, keine <code>MicrosoftSignedOnly<\/code>codecodecode-Konfiguration, keinen Hash oder MAC im Container-Header. Wie Li betont, wird die Integrit\u00e4t der Skripte allein \u00fcber die ACL (Access Control List) der DLL gew\u00e4hrleistet: Nur TrustedInstaller hat Vollzugriff; selbst SYSTEM und Administratoren haben lediglich Lese- und Ausf\u00fchrungsrechte. Ein Angreifer, der diese Datei ersetzen k\u00f6nnte, m\u00fcsste bereits die volle Systemkontrolle besitzen.<\/p>\n<h2>CVE-2025-59241: Eine bereits dokumentierte Schwachstelle<\/h2>\n<p>W\u00e4hrend seiner Analyse entdeckte Li eine weitere bemerkenswerte Tatsache: Der Dienst <code>whesvc<\/code>codecodecode war bereits Gegenstand eines gemeldeten Sicherheitsproblems. Die Verwundbarkeit mit der Kennung CVE-2025-59241, bewertet mit CVSS 7.8 (Local Privilege Escalation), wurde im Oktober 2025 von Microsoft geschlossen. Die Schwachstelle f\u00e4llt in die Kategorie \u201eUngeeignete Linkaufl\u00f6sung vor Dateizugriff\u201c.<\/p>\n<p>Der Dienst schreibt mit SYSTEM-Rechten in das Verzeichnis <code>C:\\ProgramData\\Whesvc\\<\/code>codecodecode. Die ACL dieses Ordners erbt jedoch die Berechtigungen von <code>C:\\ProgramData<\/code>codecodecode, wodurch normale Benutzer hier Dateien und Verzeichnisse anlegen k\u00f6nnen. Das Skript <code>system_summary<\/code>codecodecode schreibt in vorhersagbare Pfade \u2013 ein Angreifer konnte durch das Anlegen einer Junction (Verzeichnisverbindung) den SYSTEM-Schreibzugriff auf ein beliebiges Ziel umleiten.<\/p>\n<p>Microsofts Fix ist, wie Li anmerkt, elegant: Unmittelbar nach dem Start ruft der Dienst <code>SetProcessMitigationPolicy(ProcessRedirectionTrustPolicy, 1)<\/code>codecodecode auf. Diese Kernel-Richtlinie blockiert Vertrauensumleitungen (Junctions, Symlinks), die von weniger vertrauensw\u00fcrdigen Prozessen erstellt wurden. Statt einzelner Pfadabsicherungen wird eine ganze Klasse von Angriffen unterbunden. Einziges Zugest\u00e4ndnis an die Lua-Ebene: In der Skriptlogik zur Verzeichnisrekursion wurde eine Pr\u00fcfung auf Reparse-Points eingef\u00fcgt, die bei Erkennung abbricht. Allerdings, so Li, sei die DACL des Ausgabeverzeichnisses weiterhin geerbt \u2013 eine explizite Verriegelung auf Dateisystemebene w\u00e4re ein zus\u00e4tzlicher Schutz.<\/p>\n<h2>Telemetriekontrolle: Zwei positive Aspekte<\/h2>\n<p>Unter dem Eindruck der Fehlinformationen geht in der Debatte unter, dass Microsofts Telemetriekontrolle im Detail zwei durchdachte Elemente aufweist. Erstens pr\u00fcft der Dienst bei schwereren Trace-Erfassungen den Wert <code>AllowTelemetry<\/code>codecodecode und f\u00fchrt diese nur aus, wenn der Wert auf 3 (\u201eVollst\u00e4ndige oder optionale Diagnosedaten\u201c) gesetzt ist. Kann der Wert nicht ausgelesen werden, wird die Aktion abgelehnt \u2013 ein Fail-Close-Verhalten. Zweitens ist die \u201eautomatische Eskalation\u201c von Trace-Daten in die Telemetrie-Pipeline bei allen zehn automatischen Szenarien standardm\u00e4\u00dfig <strong>deaktiviert<\/strong>. Die einzige Ausnahme ist <code>hotkey_trace<\/code>codecodecode, ein Szenario, das der Nutzer durch Dr\u00fccken eines Hotkeys selbst ausl\u00f6sen muss.<\/p>\n<h2>Fazit: Keine Spyware \u2013 aber eine Architektur mit inh\u00e4rentem Risiko<\/h2>\n<p>Xusheng Lis Analyse widerlegt die Falschmeldung vollst\u00e4ndig: Der Dienst zeichnet weder den Bildschirm auf, noch verschickt er ohne Nutzerinteraktion Daten. Hanselmans Beschreibung des Dienstes war akkurat. Die eigentliche Leistung der Analyse liegt jedoch in der Offenlegung der darunterliegenden Architektur. Microsoft hat mit <code>whesvc<\/code>codecodecode eine vollwertige, mit SYSTEM-Rechten laufende Lua-Engine ausgeliefert. Die 84 aktuellen Skripte sind harmlos \u2013 aber die Engine selbst ist es nicht. Sie kann jede Datei schreiben, jede Registry manipulieren, jeden Prozess starten und \u00fcber FFI jeden nativen Code ausf\u00fchren.<\/p>\n<p>Der Dienst ist keine Spyware, sondern ein Diagnosewerkzeug auf Basis einer generischen Skriptplattform. Der entscheidende Punkt, den Li wiederholt betont: Ein Programm, das einen L\u00fcftersensor ausliest, und eine Engine, die das ebenfalls kann, sind aus Bedrohungsmodell-Perspektive grundverschieden. Erstere hat ein klar definiertes und begrenztes Risiko, letztere erbt alle Risiken einer vollst\u00e4ndigen Laufzeitumgebung. Dass dieses Risiko real ist, zeigt die bereits existierende Schwachstelle CVE-2025-59241. Sie ist der Preis f\u00fcr eine \u00fcberbordende F\u00e4higkeit, die in der Praxis kaum ben\u00f6tigt wird. Die gr\u00fcndliche Analyse von Xusheng Li liefert die Blaupause daf\u00fcr, warum solche Architekturen einer deutlich kritischeren Pr\u00fcfung bed\u00fcrfen, als ein kurzer Faktencheck zu einer Social-Media-Behauptung leisten kann.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Windows 11 enth\u00e4lt einen Dienst namens \u201eWindows Health and Optimized Experiences\u201c (whesvccodecodecode), der seit 2025 in Canary-Builds gesichtet wird und mittlerweile auf jedem aktuellen Windows 11-System automatisch startet. Eine gr\u00fcndliche Analyse des reverse engineering-Experten Xusheng Li zeigt nun: Der Dienst ist kein Spionagewerkzeug, wie k\u00fcrzlich in sozialen Medien behauptet wurde \u2013 doch die darin verbaute [&hellip;]<\/p>\n","protected":false},"author":5,"featured_media":0,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[6672],"tags":[],"class_list":["post-50045","post","type-post","status-publish","format-standard","category-technologie"],"_links":{"self":[{"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/posts\/50045","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/users\/5"}],"replies":[{"embeddable":true,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/comments?post=50045"}],"version-history":[{"count":2,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/posts\/50045\/revisions"}],"predecessor-version":[{"id":50047,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/posts\/50045\/revisions\/50047"}],"wp:attachment":[{"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/media?parent=50045"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/categories?post=50045"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/overcentral.com\/de\/wp-json\/wp\/v2\/tags?post=50045"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}