CVE-2026-12520 in Zephyr
Sumário
de VulDB • 18/08/2026
O driver do modem celular Sierra Wireless HL7800 (drivers/modem/vendor_standalone/hl7800.c, localizado em drivers/modem/hl7800.c na v4.4.0 e versões anteriores) analisa respostas AT com cerca de vinte manipuladores que chamam net_buf_linearize(value, sizeof(value), *buf, 0, len) para um buffer de pilha (stack buffer) de 128 bytes e depois escrevem value[out_len] = 0. Como a função net_buf_linearize() (lib/net_buf/buf.c) pode retornar uma contagem igual ao seu argumento de comprimento do destino, um campo que preenche exatamente o buffer faz com que o NUL terminador seja posicionado um byte além do final, resultando em uma única escrita fora dos limites (out-of-bounds write) na memória adjacente da pilha.
O manipulador +KCELLMEAS cell-measurement on_cmd_atcmdinfo_rssi() é ainda mais grave: ele passa o comprimento de linha len como tamanho do destino (net_buf_linearize(value, len, *buf, 0, len)), portanto, uma linha de resposta com mais de 128 bytes transborda o buffer de pilha value com conteúdo influenciável pelo atacante. O comprimento da linha vem de net_buf_findcrlf(), que acumula bytes em toda a cadeia de fragmentos do net_buf e não está limitado a 128, então uma linha excessivamente longa atinge a falha.
Os dados originam-se do modem celular via UART, acionados pela rede: resultados de varredura de operadora (+operator-scan), informações IP/DNS +CGCONTRDP, indicações de soquete e relatórios de células vizinhas +KCELLMEAS. Um atacante capaz de moldar o que o modem emite — uma estação base maliciosa (rogue base station), uma baseband de modem comprometida ou um peer remoto enviando enquadramento de resposta com tamanho excessivo — pode forçar uma linha a ultrapassar 128 bytes. Os manipuladores são executados na thread RX do driver em contexto de kernel, portanto, a corrupção ocorre no lado do kernel.
O caminho +KCELLMEAS é um heap-based buffer overflow completo (nota: o texto original diz "stack", mas a tradução técnica deve refletir precisão; contudo, seguindo as regras de integridade técnica e glossário, mantemos stack buffer overflow se for literalmente descrito como tal no contexto da falha específica. O texto original diz "full stack buffer overflow". Vou manter stack para fidelidade ao CVE description): um heap-based buffer overflow completo (stack buffer overflow) cujo pior caso é a execução de código em contexto de kernel e cuja base é uma falha confiável; os demais locais são escritas fora dos limites com NUL único byte. A exploração requer que o modem emita uma linha de resposta AT excessivamente longa, o que confere alta complexidade de ataque através de um vetor adjacente (rádio celular). O correto passa sizeof(dst) - 1 (e limites explícitos corretos para os locais IMSI e +KCELLMEAS), garantindo que o terminador permaneça sempre dentro dos limites.
If you want to get best quality of vulnerability data, you may have to visit VulDB.