| name | security-audit |
| description | Skill para auditoria de segurança em código de extensão Chrome — CSP, permissões, sanitização, storage e comunicação. |
| license | MIT |
| compatibility | Node.js 18+, TypeScript 5.x, Chrome Extension Manifest V3 |
| metadata | {"author":"marcusp","version":"1.0","project":"fill-all","category":"security"} |
Skill: Auditoria de Segurança
Objetivo
Garantir que o código da extensão Chrome Fill All está seguro contra vulnerabilidades comuns em extensões do navegador, incluindo XSS, injection, privilege escalation e data leaks.
Áreas de Auditoria
1. Content Security Policy (CSP)
O Manifest V3 impõe CSP rigorosa. Verificar:
eval("code");
new Function("return " + data);
setTimeout("alert(1)", 0);
element.innerHTML = `<script>code</script>`;
const fn = () => { };
setTimeout(() => alert(1), 0);
element.textContent = data;
2. Cross-Site Scripting (XSS)
Content scripts operam no DOM de páginas não confiáveis. Verificar:
element.innerHTML = `<span>${userInput}</span>`;
container.insertAdjacentHTML("beforeend", userInput);
element.textContent = userInput;
const span = document.createElement("span");
span.textContent = userInput;
container.appendChild(span);
import { escapeHtml } from "@/lib/ui";
element.innerHTML = `<span>${escapeHtml(userInput)}</span>`;
3. Comunicação entre Contextos
Mensagens entre background, content script e popup:
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
const parsed = parseMessagePayload(message);
if (!parsed) {
log.warn("Invalid message received:", message);
return;
}
});
4. Storage
5. Permissões do Manifest
6. Injeção de Código
7. Dados Gerados
Geradores produzem dados fictícios que podem ser sensíveis:
Checklist de Auditoria Rápida
Para cada PR, verificar:
## Segurança
- [ ] Sem `eval()`, `new Function()`, `setTimeout(string)`
- [ ] Sem `innerHTML` com dados não confiáveis
- [ ] Mensagens validadas com Zod antes de processar
- [ ] Sem dados sensíveis em storage ou mensagens
- [ ] URLs validadas com `matchUrlPattern()`
- [ ] Permissões do manifest mínimas
- [ ] `escapeHtml()` usado para dados exibidos no DOM
Vulnerabilidades Comuns em Extensões Chrome
| Vulnerabilidade | Vetor de Ataque | Prevenção |
|---|
| XSS no popup/options | Dados de storage renderizados sem escape | escapeHtml() ou textContent |
| XSS via content script | Página maliciosa manipula DOM compartilhado | Shadow DOM, textContent, validação |
| Message spoofing | Página envia mensagem falsa para background | Validar sender.id, schemas Zod |
| Privilege escalation | Content script acessa API restrita | Separar privilégios por contexto |
| Data exfiltration | Extensão envia dados para servidor externo | Sem fetch para URLs externas |
| ReDoS | URL pattern com regex exponencial | matchUrlPattern() com proteção |
| Storage poisoning | Dados corrompidos no storage | Validar com Zod ao ler |
Ferramentas de Verificação
./scripts/validate-step.sh types unit build
npm run type-check
grep -r "innerHTML" src/ --include="*.ts" | grep -v "escapeHtml"
grep -r "eval(" src/ --include="*.ts"
grep -r "new Function" src/ --include="*.ts"
grep -r "document.write" src/ --include="*.ts"
grep -r "unsafe-eval" . --include="*.json"
cat manifest.json | grep -A 20 "permissions"
Processo de Auditoria
- Revisar manifest.json — permissões mínimas?
- Buscar padrões inseguros — grep por
innerHTML, eval, etc.
- Revisar content script — XSS, DOM manipulation
- Revisar messaging — validação de mensagens
- Revisar storage — dados sensíveis, validação
- Revisar UI — escape de HTML, sanitização
- Verificar dependências — vulnerabilidades conhecidas em
npm audit