CVE-2026-19184 in Zephyr정보

요약

\~에 의해 VulDB • 2026. 10. 05.

NXP GAU ADC 드라이버(drivers/adc/adc_mcux_gau_adc.c)는 호출자가 제공한 sequence->buffer_size(바이트 단위)를 샘플 수인 활성 채널 수와 비교하여 유효성을 검사했습니다. 그런 다음 해당 바이트 카운트를 data->results_length에 직접 저장하고 mcux_gau_adc_read_samples()에서 사용 가능한 uint16_t 슬롯의 개수로 사용했습니다. 각 변환 결과는 sizeof(uint16_t)바이트를 차지하므로, "충분히 크다"고 받아들여진 버퍼에는 실제 크기의 최대 2배인 바이트 수만큼 데이터가 작성될 수 있어, 버퍼 중점 이후의 모든 샘플이 경계 밖으로 기록되었습니다.

adc_read() 및 adc_read_async()는 Zephyr 시스템 호출입니다. drivers/adc/adc_handlers.c에 있는 syscall 검증자는 호출자가 buffer_size만큼의 쓰기 가능한 바이트를 소유하고 있는지(K_SYSCALL_MEMORY_WRITE)만 확인하며, 해당 크기가 요청된 채널과 extra_samplings에 충분한지 여부는 완전히 드라이버에게 위임됩니다. CONFIG_USERSPACE=y로 빌드된 환경에서 ADC 장치 객체에 대한 권한이 부여된 사용자 모드 스레드는 의도적으로 절반 크기의 버퍼를 제출하여, 호출자의 MPU 제한 외부에서 슈퍼바이저 모드로 실행되는 드라이버의 작업 큐 핸들러가 해당 버퍼 끝을 넘어 ADC 변환 결과를 호출자가 선택한 주소와 길이로 작성하도록 유도할 수 있습니다.

이 오버런은 요청된 시퀀스에 의해 제한됩니다: sequence->options->extra_samplings가 설정되면 샘플링 루프는 각 샘플링마다 버퍼 포인터를 앞으로 이동시키므로, 총 오버런 크기는 제공된 버퍼의 전체 크기(큰 extra_samblings인 경우 킬로바이트 단위)에 도달할 수 있습니다. 작성되는 단어들은 16비트 ADC 변환 결과이므로 콘텐츠는 선택된 아날로그 입력, 이득 및 해상도를 통해 공격자가 부분적으로 영향을 줄 수 있지만, 대상 주소와 길이는 완전히 제어되므로 커널 메모리 손상, 크래시 또는 사용자 공간에서 커널로의 권한 상승(privilege escalation)에 충분합니다. CONFIG_USERSPACE가 없는 빌드나 GAU ADC 노드가 활성화된 NXP RW61x 이외의 SoC에서는 이러한 권한 경계로 인한 노출이 발생하지 않습니다. 해당 환경에서는 동일한 결함이 애플리케이션 자체가 undersized 버퍼를 전달할 때 침묵하는 오버플로우(silent overflow)만 유발합니다.

해결책은 ad-hoc 검사를 공유 adc_sequence_validate_buffer() 헬퍼 함수(num_channels * sizeof(uint16_t)에 대해 유효성 검사)로 대체하고, results_length에 buffer_size / sizeof(uint16_t)를 저장하며, 루프 경계를 후감산(post-decrement) 방식으로 수정하여 정확히 사용 가능한 슬롯 수만큼만 작성되도록 합니다.

If you want to get best quality of vulnerability data, you may have to visit VulDB.

책임이 있는

Zephyr

예약하다

2026. 08. 06.

모더레이션

수락

항목

VDB-413529

EPSS

0.00103

활동

낮음

출처

Interested in the pricing of exploits?

See the underground prices here!