versões Axios começando com ` 0.28.0 ` conter recursão descontrolada em `formDataToJSON`, que é exposto como `axios.formToJSON()` e usado internamente quando axios serializa `FormData` com `Content- Type: application/json`. Se um aplicativo passar nomes de campo de ` Formata` controlados pelo atacante para esta funcionalidade, um nome de campo com milhares de segmentos de suportes anidados pode esgotar a pilha de chamadas JavaScript e causar denegação de serviço para esse pedido ou, em aplicativos sem o gerenciamento de erro apropriado, terminar o processo. Os aplicativos são afetados apenas quando usuários não confiados podem controlar os nomes de chave `FormData` que são convertidos através de axios. Os caminhos afetados incluem o uso direto de `axios.formToJSON()` em pedidos não confiados `FormData` e axios em que `FormData' é enviado com `Content- Type: application/json' controlado pelo atacante.

O erro observado é "Erro de alcance: tamanho máximo da pilha de chamadas excedido". Em testes locais, este erro é pegagável, por isso o crash em todo o processo depende do manuseio de erros e do comportamento de execução do aplicativo consumidor. ## Funcionalidade afetada. Função afetada: - `axios.formToJSON(formData)` - Exportação ESM nomeada `formToJSON` - comportamento padrão `transformRequest' para `FormData' quando `Content- Type` contém `application/json` Função não afetada: - Envio normal de multipartes `FormData` sem a serialização do JSON - `toFormData`, que já aplica um guarda `maxDepth` - versões Axios `<= 0.27.2 `, onde `formDataToJSON` não estava presente ## Detalhes Técnicos. O código vulnerável está em `lib/ helpers/formDataToJSON.js`.

`parsePropPath()` divide um nome de campo como `a[x][x][x]` em segmentos de caminho. `buildPath()` então processa recursivamente um segmento por chamada sem impor uma profundidade máxima: ```js const result = buildPath(path, valor, alvo[nome], índice); ```. Uma chave com milhares de segmentos delimitados por suportes causa milhares de chamadas recursivas e pode exceder o limite de chamadas do motor JavaScript. Localizações fonte relevantes: - `lib/helpers/formDataToJSON.js` contém o `buildPath()' recursivo não limitado. - `lib/axios.js` expõe o ajudante como `axios.formToJSON`. - `index.js` expõe `formToJSON` como uma exportação nomeada. - `index.d.ts` e `index.d.cts` declaram a API pública. - `lib/ defaults/index.js` chama `formDataToJSON(data)` quando JSON serializa `FormData`. O ajudante inverso, `toFormData`, já aplica `maxDepth` e lança `AxiosError` com `ERR_FORM_DATA_DEPTH_EXCEEDED`, mas `formDataToJSON` não tem um guarda equivalente.

Prova do conceito de ataque. ```js importar axios de 'axios'; fd = novo FormData(); fd. append('a' + '[x]'.repeat( 15000 ), 'valor'). Tentar { axios.formToJSON( fd); console.log( 'não vulnerável'); } capturar (e) { console.log(`${e.constructor. name}: ${e.message}`); } ```` Resultado esperado nas versões afetadas. GamaErro: tamanho máximo da pilha de chamadas excedido A mesma condição pode ser alcançada através de uma transformação de solicitação de axios quando o `FormData' controlado pelo atacante é enviado com `Content-Type: application/json`.

Arrancamentos Os aplicativos podem rejeitar ou normalizar nomes de campos de formulários não confiados antes de chamar `axios.formToJSON()`. Os aplicativos podem evitar enviar `FormData` não confiado através de axios como JSON, a menos que seja necessária a conversão do JSON. Aplicativos devem pegar erros em torno de `formToJSON()` ou solicitações axiosas que transformam não confiadas `FormData'. ### Resumo Uma vulnerabilidade de recursão não controlada no `formDataToJSON` permite que qualquer usuário que controle o entrada do FormData bloqueie um processo Node.js com um único pedido. A função recursa uma vez por segmento delimitado por entrepaixe em um nome de chave FormData sem limite de profundidade, por isso uma chave como `a[x][x][x]...` com 15,000 + segmentos exausem a pilha de chamadas. Este é um negação de serviço que mata o processo através de um 'Erro de Correção' irrecuperável. A função inversa `toFormData` já aplica um limite `maxDepth` (por omissão 100 ) por exatamente este motivo — `formDataToJSON ' carece do guarda equivalente.

### Detalhes **Função variável:** `buildPath` em `lib/helpers/formDataToJSON.js`, linhas 50 – 82. `buildPath(path, value, target, index)` é chamado recursivamente — uma vez por segmento no caminho de propriedade analisada — sem verificação de profundidade: ``` javascript // lib/ helpers/formDataToJSON.js, linhas 50 – 82 função buildPath(path, valor, alvo, índice) { deixe nome = caminho[index++]; // avançar um nível se (nome === '__proto____') retornar true; //... se (!isLast) { //... resultado const = buildPath(path, valor, alvo[nome], índice); // recurse — NÃO protetor de profundidade //... } } ````` A tecla é dividida em segmentos pela opção `parsePropPath` (linha 17 ) que extrai cada `[segmento]` via regex. Uma chave com 15,000 pares de suporte produz um 15,001 - elemento array, causando 15,001 chamadas recursivas — muito além do V 8 limite padrão da pilha (~ 10,000 – 15,000 quadros).

**`formDataToJSON` é uma API pública** consumida de duas maneiras. 1 **Diretamente pelos consumidores** — exportado como `axios.formToJSON()` (`lib/axios.js: 80 `), com declarações TypeScript em ambos `index.d.ts: 699 ` e `index.d.cts: 708 `, e documentado na referência da API em quatro idiomas (`docs/pages/advanced/api-reference.md`). 2. **Internally by `transformRequest`** — chamada em `lib/ defaults/index.js: 56 ` quando o corpo de solicitação é `FormData` e `Content-Type` contém `application/json`: ````Javascript retorno hasJSONContentType? JSON.stringify( formDataToJSON( data)): dados; ``` **Contraste com `ToFormData`:** A função inversa (`lib/ helpers/toFormData.js: 118 `) força `maxDepth` (por omissão 100 ) e lança `AxiosError` com código `ERR_ FORM_ DATA_ DEPTH_ EXCEEDED` quando excedido. ` formDataToJSON` não tem proteção equivalente. ### PoC requer apenas Node.js e um axios não modificado v 1.x instalar:.

````javascript importar formulárioDataToJSON de 'axios/lib/ helpers/ formDataToJSON.js'. // Construir um Dado de Forma com uma única tecla contendo 15,000 segmentos de suporte ninhados const fd = novo FormData(); tecla de const = "a" + "[x]".repetição( 15000 ); fd. append( chave, "valor"); Tentar { formDataToJSON( fd); console.log("Não vulnerável"); } capturar (e) { console.log( e. constructor. name + ": " + e. message); // GamaErro: tamanho máximo da pilha de chamada excedido } ``` Saída verificada no Node.js 22.22.3 contra axios v 1.16.1 (corrente ` v 1.x` HEAD: ``` GamaErro: tamanho máximo da pilha de chamada excedido ```. O processo falha. Em um contexto de servidor (por exemplo, Express middleware chamando `axios.formToJSON()` em um formulário carregado), um único pedido criado termina o processo.

### Impacto **Denial of Service (process crash).** Qualquer usuário não autêntico que possa enviar FormData a um aplicativo Node.js que o passe por `axios.formToJSON()` — ou que o envie como um corpo FormData serializado pelo JSON através de axios — pode bloquear o processo do servidor com um único pedido. O `Erro da gama` da exaustão da pilha é irrecuperável em muitos contextos (não pode ser capturado de forma confiável quando a pilha já está cheia). Não são necessários privilégios especiais ou autenticação; o atacante só precisa controlar um nome de chave FormData. Registro de aconselhamento: GHSA-pmv 8 - rq 9 r- 6 j 72. Identificadores relacionados: CVE- 2026 - 67312. Tempo: GitHub Advisory Database publicou este registro em 2026 - 07 - 20 T 17: 48: 18.000 Z e lista a sua última modificação como 2026 - 08 - 31 T 20: 03: 15.000 Z.

Gravidade: MODERAR. Dados de pontuação publicados: CVSS_V 4: CVSS: 4.0 /AV:N/AC:L/AT:P/PR:N/UI:N/VC:N/VI:N/VA:L/SC:N/SI:N/África do Sul:N. Software afetado e informação de versão: pacote npm axios — ECOSISTEM: introduzido 0.28.0, corrigido 0.33.0. axios do pacote npm — ECOSISTEM: introduzido 1.0.0, corrigido 1.18.0. Classificação e evidência: identificadores de fraqueza CWE- 400, CWE- 770. O registro contém 11 suporte de referências nestes tipos: WEB, AVISO, EMBALAGAMENTO.