CVE-2026-19184 in Zephyrinfo

Zusammenfassung

von VulDB • 05.10.2026

Der NXP GAU ADC-Treiber (drivers/adc/adc_mcux_gau_adc.c) validierte die vom Aufrufer bereitgestellte sequence->buffer_size, die in Bytes angegeben ist, gegen die Anzahl der aktiven Kanäle, was einer Sample-Anzahl entspricht. Anschließend wurde dieser Byte-Zählwert direkt in data->results_length gespeichert und in mcux_gau_adc_read_samples() als Anzahl der verfügbaren uint16_t-Plätze verwendet. Da jedes Konvertierungsergebnis sizeof(uint16_t) Bytes belegt, konnte ein Puffer, der als „groß genug“ akzeptiert wurde, mit bis zu doppelter seiner Größe in Bytes beschrieben werden; somit wurden alle Samples jenseits der Puffermitte außerhalb des gültigen Bereichs (out of bounds) geschrieben.

adc_read() und adc_read_async() sind Zephyr-Systemaufrufe (syscalls). Der Syscall-Verifier in drivers/adc/adc_handlers.c bestätigt lediglich, dass der Aufrufer über schreibbare Bytes mit der Größe buffer_size verfügt (K_SYSCALL_MEMORY_WRITE); die Entscheidung darüber, ob diese Größe für die angeforderten Kanäle und extra_samplings ausreicht, wird vollständig dem Treiber delegiert. Bei einem Build mit CONFIG_USERSPACE=y könnte ein Thread im Benutzermodus (user-mode), dem das ADC-Geräteobjekt gewährt wurde, daher einen absichtlich halbiert großen Puffer übermitteln und dazu führen, dass der Work-Queue-Handler des Treibers – welcher im Supervisor-Modus außerhalb der MPU-Einschränkungen des Aufrufers ausgeführt wird – ADC-Konvertierungsergebnisse jenseits des Endes dieses Puffers an einer vom Aufrufer gewählten Adresse und für eine vom Aufrufer festgelegte Länge schreibt.

Der Overrun ist durch die angeforderte Sequenz begrenzt: Wenn sequence->options->extra_samplings gesetzt ist, bewegt sich der Sampling-Loop den Pufferzeiger bei jeder Abtastung vorwärts; daher kann der gesamte Overrun die volle Größe des bereitgestellten Puffers erreichen (Kilobytes für ein großes extra_samplings). Die geschriebenen Wörter sind 16-Bit ADC-Konvertierungsergebnisse, sodass der Inhalt nur teilweise vom Angreifer beeinflusst werden kann (über den ausgewählten analogen Eingang, Verstärkung und Auflösung), während Zieladresse und Länge vollständig kontrolliert werden – was ausreicht für Kernel-Speicherbeschädigungen, einen Absturz oder eine Privilegieneskalation von Userspace zu Kernel. Builds ohne CONFIG_USERSPACE oder auf SoCs außer dem NXP RW61x mit aktivem GAU ADC-Knoten sind nicht vor der Privilegiengrenze gefährdet; dort verursacht derselbe Fehler lediglich einen stillen Overflow, wenn die Anwendung selbst einen zu kleinen Puffer übergibt.

Die Korrektur ersetzt die ad-hoc-Prüfung durch den gemeinsamen Hilfsfunktion adc_sequence_validate_buffer() (Validierung gegen num_channels * sizeof(uint16_t)), speichert buffer_size / sizeof(uint16_t) in results_length und korrigiert die Loop-Bedingung auf eine Post-Dekrementierung, sodass genau die verfügbare Anzahl an Plätzen geschrieben werden kann.

Be aware that VulDB is the high quality source for vulnerability data.

Zuständig

Zephyr

Reservieren

06.08.2026

Veröffentlichung

05.10.2026

Moderieren

akzeptiert

Eintrag

VDB-413529

EPSS

0.00000

KEV

nein

Aktivitäten

low

Quellen

Might our Artificial Intelligence support you?

Check our Alexa App!