`valibot' 1.4.1 pode jogar um `TypeError` dentro do seu ajudante `flatten()` quando os problemas de validação contêm teclas de objetos controladas pelo atacante, tais como `toString`, `valueOf` ou `hasOwnProperty'. O problema é alcançável através da validação normal `record()`. `record()` filtros intencionalmente `__proto__`, `prototype' e `constructor', mas ele ainda aceita outras chaves próprias que colidem com propriedades hereditárias `Object.prototype'. Se o esquema de chave de registro ou esquema de valor rejeitar tal entrada, o Valibot cria um caminho de problema contendo essa chave. Passar os problemas resultantes para o ajudante documentado do Valibot `flatten()` faz com que `flatErros.nested[ dotPath]` resolva para o método herdado em vez de um array de erro próprio, e o ajudante chame `.push(...)` nessa função. Este não é um protótipo global de poluição. O impacto é o gerenciamento de disponibilidade/erro: os aplicativos que validam objetos controlados pelo usuário com `record()` e erros de validação aplanados para respostas API podem bloquear o caminho de solicitação com um `TypeError` em vez de devolver erros de validação estruturados.
- Ecosistema: npm - Pacote: `valibot` - Versão afetada verificada: ` 1.4.1 ` - Versão fixa: nenhum conhecido - Repositório: `open-circle/valibot` - Ref principal atual testado pela revisão de fonte: ` 9 bb 6617 ` `record()` usa `_isValidObjectKey()` antes de validar entradas de registro. O ajudante bloqueia as três chaves clássicas do protótipo de poluição: """ts""""""""""""""""""""""""""""""""""""""""""". Ele não bloqueia outros nomes herdados como `Object.prototype`, tais como `toString`, `valueOf' e `hasOwnProperty'. Estas teclas de objeto JSON permanecem válidas e podem aparecer nos caminhos de problema quando o esquema de chaves de registro ou o esquema de valor rejeitar a entrada.
`flatten()` então cria armazenamento de erros aninhados com um objeto comum. ``` ts flatErrors.nested = {}; ``` Para um caminho de pontos como `toString`, esta verificação lê a função hereditária `Object.prototype.toString`: `` ts se (flatErrs.nested![ dotPath]) { flatErrrs.nested![ dotPath]!.push(issue.message); } ```. Como a função herdada é verdade, `flatten()` chama `.push(...)` em uma função e lança `TypeError: flatErrrs.nested[ dotPath]..push não é uma função `.
Um atacante remoto pode ativar isso se um aplicativo. 1. valida objetos JSON controlados pelo atacante com ` v. record(...)`; 2. recebe uma chave inválida ou um valor inválido sob uma chave como "toString"; 3. usa o ajudante do Valibot `flatten(result.issues)` para preparar erros de validação. Este é um padrão comum na validação de API/ formulário: `safeParse()` coleta problemas e `flatten()` converte- os em objetos de erro amigáveis à resposta. Em vez de uma resposta de validação, o pedido pode atingir um caminho de exceção inesperado. A mesma causa raiz também pode afetar problemas construídos manualmente ou outros esquemas que colocam nomes de propriedades de objetos herdados em caminhos de pontos. Estou relatando o caminho ` record()` porque ele usa apenas APIs do Valibot e chaves JSON controladas pelo atacante.
Executar em um diretório descartável. ``` Bash npm instalar valibot@ 1.4.1 nodo poc_record_flatten_inherited_key_dos.mjs ``` ````js importar * como v de 'valibot'. const esquema = v.record(v.string(), v.number()); const entrada = JSON.parse('{"toString":"não- um-number"}'); resultado const = v.safeParse(schema, entrada); console.log(result.success); // falso console.log(result.issues[ 0 ].path.map((item) => item.key)); // ["toString"].
v.flatten(issue. issues); // TypeError ```. Saída observada a partir de `valibot@ 1.4.1 `: ```json { "nome": "record value schema rejeite o valor controlado pelo atacante", "key": "toString", "sucesso": falso, "issueCount": 1, "firstPath": ["toString"], "firstMessage": "Tipo inválido: Número esperado, mas recebido \"não-a-number\"", "amalhado": { "ok": falso, "exceção": "TypeError", "message": "flatErrors.nested[ dotPath]..push não é uma função" } } ```` O PoC local também reproduz a mesma exceção para ` valueOf`, `hasOwnProperty`, ` isPrototypeOf`, `proprietyIsEnumerable' e `toLocaleString'. Um caso de controle com uma chave comum produz erros normalmente planos.
Duplicar verificações realizadas antes da submissão. - os metadados npm confirmaram que a versão atual `valibot` é ` 1.4.1 ` e mapas para `open-circle/valibot`. - `gh api repos/open-circle/valibot/private-vulnerability-reporting` retornaram `{" habilitado":verdadeiro}`. - `npm audit` para um projeto limpo contendo apenas `valibot@ 1.4.1 ` não retornou nenhuma vulnerabilidade. - Avisos de repositório e o Banco de Dados de Aconselhamento GitHub só retornaram o aviso histórico de emoji ReDoS corrigido em ` 1.2.0 `. - Consulta de versão exata do OSV para npm `valibot` ` 1.4.1 ` retornado nenhuma vulnerabilidade. - Pesquisas de edição/PR pública para `flatten toString`, `flatten hasOwnProperty', `record toString`, `__proto__', `construtor' e `prototype pollution' não encontraram uma divulgação correspondente desta exceção `record()` do caminho do problema / `flatten()`. - Revisou as RPs públicas relacionadas: `open-circle/valibot# 67 ` adicionado protótipo de redução da poluição para ` registro()` por listagem negra `__proto__`, `prototipo' e `construtor'; ele não cobre colisões `flatten()' com outros nomes de propriedade herdados. `open-circle/valibot# 1429 ` é um tipo aberto de objeto simples / ` record()` semântica PR e não revela este comportamento de exceção `flatten()`. ## Remediação sugerida. Use contêineres de prototipo nulo para mapas de erro plano e/ou efetue verificações de propriedade própria antes de anexá-lo:.
- Inicialize `flatErrs.nested' como `Object.create(null)`. - Verifique os itens ninhados com `Object.prototype.hasOwnProperty.call(flatErrrs.nested, dotPath)` em vez de veracidade. - Considere filtrar ou escapar de segmentos de caminho de pontos inseguros em `getDotPath()` / `flatten()`, incluindo nomes de propriedades herdados de objetos. - Adicione testes de regressão para `flatten()` com caminhos `String`, `valueOf', `hasOwnProperty', `__proto_`, `prototype' e `construtor'. - Considere usar o mesmo endurecimento para outros objetos acumuladores que armazenam chaves controladas pelo atacante. Registro de aconselhamento: GHSA- 5 qjj- 4 xww- 7 Phc. Identificadores relacionados: CVE- 2026 - 59952.
Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 24 T 16: 14: 31.000 Z e lista a sua última modificação como 2026 - 07 - 24 T 16: 14: 31.000 Z. Gravidade: MODERAR. Dados de pontuação publicados: CVSS_V 4: CVSS: 4.0 /AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/África do Sul:N.
Software afetado e informações de versão: npm package valibot — ECOSYSTEM: introduzido 0, corrigido 1.4.2. Classificação e evidência: identificadores de fraqueza CWE- 755. O registro contém 5 suporte de referências nestes tipos: WEB, PACKAGE.