A segurança da documentação da API costuma ficar fora das auditorias. A API recebe autenticação, rate limit e testes; já a especificação OpenAPI, o Swagger UI e os guias de autenticação muitas vezes ficam em um repositório Git ou host estático sem revisão contínua. Em 20 de maio de 2026, o GitHub confirmou que invasores roubaram dados de cerca de 3.800 repositórios internos após uma extensão VS Code maliciosa ser instalada no laptop de um funcionário. Use esse incidente como gatilho para uma checagem prática: se alguém alterasse silenciosamente sua documentação publicada, você perceberia antes que seus consumidores copiassem endpoints, tokens ou fluxos errados para produção?
TL;DR
Documentação de API segura precisa de quatro propriedades verificáveis:
- Controle de acesso: quem pode ler a documentação.
- Versionamento: qual versão da API cada consumidor está usando.
- Integridade: se o conteúdo publicado corresponde à fonte aprovada.
- Trilha de auditoria: quem alterou o quê e quando.
Docs-as-code no Git funciona bem para APIs públicas e pipelines disciplinados. Vira risco quando o repositório é público sem controle de acesso, quando a especificação diverge da API real ou quando um exemplo adulterado chega aos consumidores sem detecção.
Uma camada gerenciada como o Apidog adiciona proteção por senha, listas de permissões por IP e e-mail, domínio personalizado, versionamento e documentação sincronizada com o design da API como fonte da verdade.
Por que a violação do GitHub deve fazer você revisar sua documentação de API
Antes de mudar sua arquitetura, entenda o alerta. Segundo a cobertura do BleepingComputer, o grupo TeamPCP exfiltrou repositórios internos do GitHub e colocou o conjunto de dados à venda. A extensão maliciosa veio do marketplace oficial do VS Code e foi executada no dispositivo de um funcionário. O GitHub informou que não encontrou evidências de dados de clientes afetados fora dos repositórios internos, e a investigação continuava em andamento.
O ponto para equipes de API é direto: sua documentação também é uma superfície de ataque.
Muitas equipes publicaram um Swagger UI no GitHub Pages, apontaram um CNAME e nunca mais revisaram o fluxo. O repositório é público. O último merge vira a documentação ativa. Commits de documentação recebem menos atenção do que código de produção.
Isso é perigoso porque documentação de API é instrução executável para outros desenvolvedores. Consumidores copiam:
- URLs de endpoints
- payloads de exemplo
- cabeçalhos de autenticação
- fluxos OAuth
- exemplos de token
- snippets de código
Se um invasor muda essas instruções, ele não está apenas alterando texto. Ele está influenciando código que será executado em produção.
Esse padrão aparece em outros incidentes: uma pequena mudança em uma superfície confiável pode se propagar. Veja também nosso artigo sobre lições de segurança de API da violação da Vercel.
Este guia cobre:
- Como documentação comprometida prejudica consumidores de API.
- Quando docs-as-code no Git é adequado.
- Quando docs-as-code vira risco.
- Como aplicar uma checklist de documentação segura.
- Como o Apidog ajuda a fechar lacunas de controle de acesso, versionamento e integridade.
Para temas relacionados, veja também:
- O que a violação do GitHub significa para ferramentas de API auto-hospedadas
- Segurança de chaves de API em extensões do VS Code
O que pode dar errado quando sua documentação é comprometida
Modele sua documentação como uma cadeia:
Fonte da documentação
↓
Repositório Git
↓
Pipeline de build
↓
Host publicado
↓
Consumidor da API
Se qualquer etapa for comprometida, os consumidores podem receber instruções erradas.
1. Um endpoint adulterado pode chegar ao código de produção
Exemplo: sua documentação mostra este endpoint:
https://api.payments.acme.com/v2/charge
Um invasor altera para:
https://api-payments-acme.example.net/v2/charge
A página continua renderizando. O YAML continua válido. O CI pode continuar verde. Mas o próximo consumidor que copiar o endpoint pode enviar dados sensíveis para o domínio errado.
O mesmo vale para uma especificação OpenAPI:
paths:
/v2/payment-intents:
post:
summary: Create a payment intent
servers:
- url: https://api.acme-pay.com
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/PaymentIntentRequest'
responses:
'201':
description: Payment intent created
Uma alteração mínima no campo servers.url pode redirecionar clientes gerados automaticamente:
servers:
- - url: https://api.acme-pay.com
+ - url: https://api-acme-pay.example.net
Se seus consumidores geram SDKs a partir da especificação, o risco aumenta:
openapi-generator-cli generate \
-i openapi.yaml \
-g typescript-fetch \
-o ./client
Uma especificação adulterada pode virar cliente adulterado.
2. Endpoints internos podem vazar
Repositórios de documentação acumulam rotas que não deveriam ser públicas:
paths:
/admin/users:
get:
summary: Internal admin user list
/debug/session:
post:
summary: Debug session inspector
/partners/reconcile:
post:
summary: Partner-only reconciliation endpoint
Se o repositório for público, esses endpoints viram um mapa para atacantes.
Mesmo se o repositório for privado, uma violação pode expor a especificação inteira. O invasor passa a conhecer:
- rotas
- parâmetros
- formatos de payload
- nomes de headers
- esquemas de autenticação
- endpoints de administração ou parceiros
Para revisar esse tipo de superfície antes que alguém faça isso por você, use uma checklist como a lista de verificação de testes de segurança de API para 2026.
3. GitHub Pages público não é controle de acesso
GitHub Pages é ótimo para documentação pública. Mas ele não controla quem lê.
Se sua documentação é destinada apenas a clientes, parceiros ou times internos, um URL “difícil de adivinhar” não basta.
URLs vazam por:
- histórico do navegador
- headers
Referer - logs de proxy
- favoritos compartilhados
- chats internos
- ferramentas de analytics
- tickets de suporte
Se qualquer pessoa com o link consegue acessar, isso não é documentação privada.
4. Documentação desatualizada também é um problema de segurança
Nem todo incidente exige um invasor.
Às vezes a API muda e a documentação não:
- POST /v1/users
+ POST /v2/users
Ou o payload muda:
{
- "name": "Ana"
+ "fullName": "Ana Silva"
}
Quando a documentação diverge da API real, consumidores implementam contra um contrato falso. Se a documentação também pode ser adulterada, fica ainda pior: você não sabe se o erro é drift operacional ou alteração maliciosa.
Pergunta prática:
Se um endpoint mudou na documentação publicada há uma hora, você consegue provar quem mudou, por qual revisão e a partir de qual fonte?
Se não, sua documentação não é verificável.
Quando docs-as-code no Git é uma boa escolha
Docs-as-code é uma prática válida. Manter OpenAPI e Markdown no Git pode funcionar muito bem quando há disciplina.
Um fluxo comum:
openapi.yaml
docs/*.md
↓
Pull Request
↓
Review obrigatório
↓
CI valida a especificação
↓
Build do Swagger UI ou Redoc
↓
Deploy em host estático
Ferramentas como Redoc funcionam bem nesse modelo.
Use docs-as-code quando:
- a API é totalmente pública;
- não há endpoints internos no repositório publicado;
- branches são protegidas;
- PRs exigem revisão;
- commits de documentação são revisados com o mesmo rigor do código;
- o pipeline usa dependências e actions fixadas;
- secrets de deploy têm escopo mínimo;
- a especificação é validada contra a API real;
- alguém é dono da atualização da documentação.
Exemplo de validação mínima no CI:
name: Validate OpenAPI
on:
pull_request:
paths:
- "openapi.yaml"
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate OpenAPI spec
run: npx @redocly/cli lint openapi.yaml
Você também pode bloquear alterações sensíveis com revisão extra:
name: Detect sensitive OpenAPI changes
on:
pull_request:
paths:
- "openapi.yaml"
jobs:
diff:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Show changed server URLs
run: |
git fetch origin main
git diff origin/main...HEAD -- openapi.yaml | grep -E "servers:|url:" || true
Isso não substitui revisão humana, mas ajuda a destacar mudanças que merecem atenção.
Quando docs-as-code vira risco
O mesmo modelo começa a falhar quando uma destas condições aparece:
- a documentação deveria ser privada, mas está em host público;
- endpoints internos estão misturados com endpoints públicos;
- muitas pessoas ou contas de serviço têm acesso de escrita;
- PRs de documentação são aprovados automaticamente;
- tokens de CI e deploy não são auditados;
- a especificação é editada manualmente e diverge da API;
- ninguém valida se o site publicado corresponde à fonte revisada;
- não há logs confiáveis da etapa de deploy.
A violação do GitHub se encaixa nesse alerta. O Git dá histórico e transparência, mas não garante confidencialidade se o repositório for exfiltrado.
Para comparar abordagens de documentação auto-hospedada, veja a comparação de documentação de API auto-hospedada.
Resumo prático:
- mantenha docs-as-code se sua API é pública e seu pipeline é controlado;
- reconsidere se você precisa de acesso restrito, versionamento gerenciado ou garantia de que a documentação publicada vem da fonte correta.
Checklist: o que “documentação de API segura” significa
Use esta checklist para auditar sua configuração atual.
1. Controle de acesso
Perguntas:
- A documentação é pública de propósito?
- Quem consegue acessá-la hoje?
- Você consegue revogar acesso em menos de um minuto?
- Clientes, parceiros e times internos têm níveis diferentes de acesso?
- Existe senha, allowlist de IP, allowlist de e-mail ou SSO?
Sinal de risco:
“Ela é privada porque ninguém tem o link.”
Isso não é controle de acesso.
2. Versionamento
Perguntas:
- A documentação da API v1 continua disponível?
- A documentação da v2 está separada da v1?
- Consumidores antigos conseguem encontrar o contrato correto?
- Você sabe o que a documentação dizia em uma data específica?
Estrutura recomendada:
/docs/v1
/docs/v2
/docs/beta
Ou versões publicadas lado a lado em uma plataforma de documentação.
3. Integridade
Perguntas:
- A documentação publicada vem de uma fonte controlada?
- Existe revisão antes de publicar?
- Alterações em
servers.url, autenticação e exemplos de token recebem atenção especial? - Você consegue detectar diferença entre fonte revisada e site publicado?
Exemplo de campos que merecem revisão cuidadosa em OpenAPI:
servers:
- url: https://api.example.com
components:
securitySchemes:
bearerAuth:
type: http
scheme: bearer
paths:
/oauth/token:
post:
summary: Exchange authorization code for access token
4. Trilha de auditoria
Perguntas:
- Quem alterou a documentação?
- O que mudou?
- Quando mudou?
- Quem aprovou?
- Qual versão foi publicada?
- O deploy foi feito por qual pipeline ou usuário?
O Git cobre parte disso no repositório. Mas você também precisa de rastreabilidade na publicação.
Como o Apidog ajuda a implementar documentação segura
Apidog é uma plataforma de API para projetar, depurar, testar, simular e documentar APIs. Para acompanhar na prática, baixe o Apidog e abra um projeto com uma definição de API.
1. Publique documentação a partir de uma fonte controlada
No Apidog, a documentação é gerada a partir do design da API no projeto. Você define endpoints, schemas e autenticação, e o Apidog gera automaticamente a documentação.
Fluxo básico:
Design da API no Apidog
↓
Endpoints, schemas e auth
↓
Publicar documentação
↓
Site interativo com exemplos e console de teste
A vantagem é reduzir drift. A documentação não precisa ser um Markdown solto que evolui separado da definição da API.
2. Aplique controle de acesso real
Ao publicar documentação no Apidog, você pode escolher métodos de acesso:
- Público: qualquer pessoa com o link pode ler.
- Proteção por senha: acesso mediante senha compartilhada.
- Lista de permissões de IP: restrição por IPs ou faixas, como escritório ou VPN.
- Lista de permissões de e-mail: acesso por e-mails ou domínios permitidos.
- Login personalizado: autenticação própria com JWT emitido pelo seu servidor.
Exemplo de regra por domínio:
*@suaempresa.com
Isso permite cobrir uma organização inteira sem cadastrar cada usuário manualmente.
O Apidog documenta essas opções no guia para controlar o acesso à documentação da API.
3. Use domínio personalizado
Você pode publicar a documentação em um domínio próprio, como:
developer.suaempresa.com
O Apidog suporta domínio personalizado via CNAME DNS ou proxy reverso.
Domínio personalizado não substitui autenticação, mas ajuda a manter a documentação em uma superfície governada pela sua organização.
4. Mantenha OpenAPI sincronizado com o design da API
O Apidog trata o design da API como fonte da verdade e mantém a documentação sincronizada com ele.
Ele importa:
- OpenAPI 3.0
- OpenAPI 3.1
- Swagger 2.0
Também suporta importações programadas para manter uma especificação externa atualizada.
Se hoje você mantém um openapi.yaml manualmente no Git, revise se ele ainda representa a API real. Equipes que vêm do SwaggerHub podem usar o guia para migrar documentação de API do SwaggerHub para o Apidog.
5. Publique múltiplas versões
O Apidog suporta versionamento da documentação. Isso permite manter versões lado a lado:
API v1 → documentação v1
API v2 → documentação v2
API beta → documentação beta
Isso evita que consumidores da v1 leiam, sem perceber, instruções da v2.
Comparação rápida de opções
| Propriedade | GitHub Pages Público (Swagger UI / Redoc) | Docs auto-hospedados em seu próprio servidor | Docs gerenciados (Apidog) |
|---|---|---|---|
| Controle de acesso | Nenhum; apenas obscuridade de URL | O que você construir e mantiver | Embutido: senha, IP, e-mail, login personalizado |
| Versionamento | Manual; builds ou branches separadas | Manual | Embutido; versões publicadas lado a lado |
| Integridade | Revisão + histórico do Git, se imposto | Depende do seu pipeline | Docs gerados a partir do design de API controlado |
| Trilha de auditoria | Histórico do Git para o repositório, não para a implantação | Depende do seu logging | Histórico de mudanças no design e na documentação publicada |
| Custo de manutenção | Baixo para configurar, mas exige manutenção contínua do pipeline | Alto; você mantém toda a pilha | Baixo; a plataforma cuida da hospedagem e dos portões |
| Melhor adequação | APIs totalmente públicas com pipeline disciplinado | Equipes com requisitos estritos de auto-hospedagem | Equipes que precisam de controle de acesso sem sobrecarga operacional |
Não existe uma resposta universal.
Use GitHub Pages público quando:
- a API é realmente pública;
- a especificação não contém endpoints internos;
- o pipeline é revisado e protegido.
Use auto-hospedagem quando:
- há requisitos rígidos de residência, isolamento ou infraestrutura;
- sua equipe consegue manter autenticação, logs, CI/CD e hardening.
Use uma camada gerenciada quando:
- você precisa restringir acesso rapidamente;
- quer versionamento sem manter infraestrutura;
- precisa reduzir drift entre design e documentação publicada.
Para aprofundar a comparação, veja:
Plano de ação para auditar sua documentação
Execute esta revisão em uma sessão curta com o time de API.
1. Liste todos os locais publicados
- GitHub Pages
- Swagger UI interno
- Redoc público
- Portal de desenvolvedores
- Wiki interna
- Postman collection pública
- Repositórios com openapi.yaml
- PDFs ou guias antigos
2. Classifique cada documentação
Pública
Parceiros
Clientes
Interna
Restrita por produto/plano
3. Verifique controle de acesso
Para cada item, responda:
Quem pode ler?
Como revogar acesso?
Existe autenticação real?
Existe senha, IP allowlist, e-mail allowlist ou SSO?
4. Verifique integridade
Qual é a fonte da verdade?
Quem aprova mudanças?
O site publicado corresponde à fonte?
Mudanças em endpoints e auth são revisadas?
5. Verifique versionamento
A v1 ainda tem documentação própria?
A v2 sobrescreveu a v1?
Consumidores antigos sabem qual versão usar?
6. Verifique trilha de auditoria
Consigo ver alterações dos últimos 90 dias?
Consigo identificar autor e aprovador?
Consigo saber quando uma versão foi publicada?
Conclusão
A violação do GitHub não é motivo para abandonar docs-as-code ou deixar de usar GitHub. Ela é um lembrete para auditar uma superfície que muitos times ignoram: a documentação da API.
Seu próximo passo:
- Liste onde sua documentação está publicada.
- Classifique cada publicação por público.
- Valide controle de acesso, versionamento, integridade e auditoria.
- Corrija primeiro a maior lacuna.
Se a lacuna principal for controle de acesso, teste publicar a documentação de um projeto no Apidog com senha, allowlist de IP ou allowlist de e-mail. Isso permite transformar documentação de API de “site estático esquecido” em uma superfície governada e verificável.

Top comments (0)