Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
nginx-cve-fix — Container nginx 1.25.5 construído a partir da fonte com correção retroportada do CVE-2026-42945, atualização do OpenSSL, cadeia de proveniência completa e atestado VEX. | Kitploit
Ferramentas/GitHubGitHub/barappteam/nginx-cve-fix
Scanners de VulnerabilidadesSegurança de ContêineresAnálise de VulnerabilidadesAuditoria de ConfiguraçãoDevSecOpsSegurança da Cadeia de Suprimentos
GitHubbarappteam/nginx-cve-fix

nginx-cve-fix

Container nginx 1.25.5 construído a partir da fonte com correção retroportada do CVE-2026-42945, atualização do OpenSSL, cadeia de proveniência completa e atestado VEX.

Ver Repositório
3há 3 mesesAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

Correção de CVE do Nginx - Drop-in Compilado a Partir do Código Fonte para nginx:1.25-bookworm

Uma imagem de contêiner nginx 1.25.5 compilada a partir do código fonte que corrige duas CVEs presentes na imagem oficial nginx:1.25-bookworm, preservando o comportamento de tempo de execução upstream.

CVEComponenteSeveridadeTécnicaModelo de verificação
CVE-2024-6119OpenSSL / libssl3AltaAumento de versão de dependênciaVerificável por scanner: libssl3 3.0.20 visível no banco de dados dpkg
CVE-2026-42945nginx ngx_http_rewrite_moduleCríticaPatch de código fonte retroportadoVerificável por proveniência: derivação do patch + teste de regressão + atestado de compilação + VEX

Estes representam dois modelos distintos de correção:

  1. Aumento de versão (CVE-2024-6119) - a versão corrigida da biblioteca é diretamente visível para scanners através do banco de dados dpkg. Nenhuma atestação adicional necessária.
  2. Retroporte de código fonte (CVE-2026-42945) - a versão do pacote permanece 1.25.5, então os scanners não conseguem distinguir o binário corrigido de um não corrigido. A correção é demonstrada através da proveniência do código fonte, verificação em tempo de compilação e teste de regressão. O VEX fornece o sinal para a camada do scanner.

Status de paridade

Os argumentos de configuração nginx -V desta imagem correspondem aos de nginx:1.25-bookworm (comparados caractere por caractere após normalizar o caminho de compilação -ffile-prefix-map; verificado em test/compat.py::test_nginx_version). O conjunto de testes (make test) valida 89 asserções cobrindo metadados da imagem, módulos dinâmicos, layout do sistema de arquivos, comportamento do entrypoint, empacotamento dpkg e tratamento de requisições HTTP contra a imagem upstream ativa.

Diferenças conhecidas em relação ao upstream (não validadas como idênticas):

  • A linha built with OpenSSL X.X.X em nginx -V reflete a versão do libssl-dev do compilador, que pode diferir do OpenSSL em tempo de compilação do upstream.
  • O conteúdo binário não é idêntico byte a byte (ambiente de compilação diferente, timestamps de invocação da toolchain diferentes).
  • O conjunto de pacotes da imagem difere - base debian:bookworm-slim em vez da árvore de pacotes herdada da imagem oficial.
  • A versão do libssl3 em tempo de execução é o que o bookworm atualmente fornece (3.0.20 no momento da escrita), não a versão fixada na imagem upstream.

Início Rápido```bash

Build everything (builder → .deb → final image)

make image

Run automated compatibility tests

make test

Run CVE-2026-42945 regression test

make test-cve

Verify patch provenance (re-derives from upstream tarballs)

make verify-patch

Scan and demonstrate VEX

make scan

root@kitploit:~
Um comando para construir, testar e escanear:```bash
make all

Estrutura do Repositório```

build/ Dockerfile.build Builder image (debian:bookworm-slim + compilation deps) build.sh Fetch → verify → patch → compile → package nginx generate-vex.sh Generate OpenVEX document for backported CVE verify-patch.sh Re-derive patch from upstream tarballs (audit tool) patches/ CVE-2026-42945.patch Backported one-line fix from nginx 1.30.1 CVE-2026-42945.provenance.json Machine-readable patch provenance and derivation metadata

test/ compat.py 89-assertion compatibility test suite (runs against live upstream) test_cve_2026_42945.py CVE-specific regression test (exercises vulnerable code path)

artifacts/ patch-attestation.json Build-time patch attestation (tracked) nginx_*.deb Compiled package (gitignored - rebuilt via make build-source) nginx Compiled binary (gitignored) Containerfile Final runtime image definition Makefile Orchestrates build → test → scan pipeline vex.json Generated OpenVEX v0.2.0 document baseline-trivy.txt Point-in-time Trivy scan of nginx:1.25-bookworm baseline-grype.txt Point-in-time Grype scan of nginx:1.25-bookworm fixed-trivy.txt Trivy scan of the fixed image fixed-grype.txt Grype scan of the fixed image (without VEX) fixed-grype-vex.txt Grype scan of the fixed image (with VEX applied)

root@kitploit:~
---

## Processo de Construção

### Arquitetura```
debian:bookworm-slim (builder)
  └─ build.sh
       ├─ curl nginx-1.25.5.tar.gz (SHA256-verified)
       ├─ curl njs-0.8.4 from github.com/nginx/njs
       ├─ patch -p1 < CVE-2026-42945.patch
       ├─ ./configure (flags identical to upstream nginx -V)
       ├─ make: release binary, debug binary, 4 dynamic module families (×2 release/debug)
       ├─ make: NJS modules (×2 release/debug) + njs CLI binary
       └─ dpkg-deb → nginx_1.25.5-1~bookworm+echo1_<arch>.deb

debian:bookworm-slim (runtime)
  ├─ apt-get install runtime deps (libssl3 ≥ 3.0.14 enforced)
  ├─ dpkg -i nginx_*.deb
  └─ COPY --from=upstream /docker-entrypoint.sh + /docker-entrypoint.d/

O Containerfile NÃO copia /etc/nginx do upstream. Todos os arquivos de configuração são fornecidos dentro do .deb e rastreados pelo mecanismo de conffile do dpkg. Isso é necessário para o script de entrypoint 10-listen-on-ipv6-by-default.sh, que usa dpkg-query para detectar se o default.conf foi modificado pelo usuário.

Garantias de Integridade

  • Tarballs de origem: Todos os arquivos fonte (nginx, NJS) são verificados por SHA256 contra hashes hardcoded antes da extração. A compilação é abortada em caso de incompatibilidade.
  • Compilação a partir do código fonte: ./configure && make dentro de um container Debian limpo. Sem binários upstream, sem apt install nginx.
  • Sem acesso à rede durante a compilação: as dependências são instaladas na camada da imagem Docker do builder; o build.sh apenas busca arquivos fonte fixados.

Reprodutibilidade

A compilação é principalmente reproduzível, mas não hermética:

  • A versão do código fonte do nginx e o SHA256 são fixados e verificados antes da extração.
  • A versão do NJS e o SHA256 são fixados e verificados antes da extração.
  • As dependências do builder são enumeradas no Dockerfile.build, mas não têm versões fixadas.
  • Os pacotes de runtime do Debian são resolvidos a partir dos repositórios ativos do bookworm no momento da compilação, portanto versões secundárias podem variar entre compilações.

Para melhorar a reprodutibilidade, fixe o digest da imagem base:```bash docker pull debian:bookworm-slim docker inspect debian:bookworm-slim --format='{{index .RepoDigests 0}}'

Then use: FROM debian:bookworm-slim@sha256:

root@kitploit:~
---

## Detalhes da Remediação de CVE

### CVE-2024-6119 - Atualização de Versão do OpenSSL

| Campo                | Valor                                                |
| -------------------- | ---------------------------------------------------- |
| **Componente**       | OpenSSL / libssl3                                    |
| **Severidade**       | Alta (CVSS 7.5)                                      |
| **Tipo**             | Negação de Serviço via verificações de nomes X.509   |
| **Versão base**      | 3.0.11-1~deb12u2                                     |
| **Versão corrigida** | 3.0.14-1~deb12u2 (ou posterior)                      |
| **Nossa versão**     | 3.0.20-1~deb12u1                                     |
| **NVD**              | https://nvd.nist.gov/vuln/detail/CVE-2024-6119       |
| **Advisory**         | https://openssl-library.org/news/secadv/20240903.txt |

**Como a correção funciona:**

O pacote `.deb` declara `Depends: libssl3 (>= 3.0.14)`, o que força o
`apt-get install` a obter uma versão do OpenSSL que inclui a correção. Os
repositórios atuais do Debian bookworm fornecem a versão 3.0.20, que corrige o CVE-2024-6119 e
dezenas de outros CVEs do OpenSSL a partir da versão base (CVE-2024-2511, CVE-2024-5535,
CVE-2024-4741, CVE-2023-5678, CVE-2023-6129, CVE-2023-6237, CVE-2024-9143,
CVE-2025-15467, CVE-2025-69420).

**Comportamento do scanner:**

Grype e Trivy veem `libssl3 3.0.20` no banco de dados
dpkg e reconhecem que 3.0.20 ≥ 3.0.14, então o CVE-2024-6119 não é mais
relatado. Nenhum VEX é necessário - o aumento de versão é evidente.

**Verificação:**```bash
grep "CVE-2024-6119" baseline-grype.txt  # present
grep "CVE-2024-6119" fixed-grype.txt     # absent

CVE-2026-42945 - Patch Retroportado

CampoValor
Componentenginx ngx_http_rewrite_module
GravidadeMédia (classificação nginx.org)
Versão basenginx 1.25.5
Corrigido emnginx 1.30.1 (lançado em 2026-05-13)
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-42945
Avisohttps://my.f5.com/manage/s/article/K000161019
CHANGES Upstreamnginx 1.30.1 CHANGES: "estouro de buffer de memória heap no módulo de reescrita"

Vulnerabilidade:

ngx_http_script_regex_end_code() em src/http/ngx_http_script.c não redefinia e->is_args ao processar um resultado de regex de reescrita. Se is_args fosse definido por uma operação anterior do mecanismo de script, cálculos subsequentes de comprimento de buffer no caminho de redirecionamento/reescrita estariam incorretos, causando um estouro de buffer de memória heap de tamanho controlado pelo atacante por meio de URIs de requisição manipuladas.

A correção (uma linha):```c // Added before the existing e->quote = 0; at line 1205 e->is_args = 0;

root@kitploit:~
**Proveniência do patch:**

| Evidência                    | Localização / Valor                                                                                                                     |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------ |
| Commit upstream             | [`2046b45aa0c6e712c216b9075886f3f26e9b4ca9`](https://github.com/nginx/nginx/commit/2046b45aa0c6e712c216b9075886f3f26e9b4ca9)         |
| Autor upstream             | Roman Arutyunyan (arut), commitado por Sergey Kandaurov (pluknet), 2026-05-13                                                         |
| PR upstream                 | [nginx/nginx#1350](https://github.com/nginx/nginx/pull/1350)                                                                         |
| Tags upstream               | `release-1.31.0`, `release-1.30.1`                                                                                                   |
| Correção anterior relacionada           | [`74d9399`](https://github.com/nginx/nginx/commit/74d939974d430a2c2e71b0134114d2a7b04dcc20) (2012, problema semelhante de escape `is_args`) |
| Arquivo de patch                  | `build/patches/CVE-2026-42945.patch`                                                                                                 |
| Metadados de proveniência         | `build/patches/CVE-2026-42945.provenance.json`                                                                                       |
| Tarball de código-fonte (vulnerável) | `https://nginx.org/download/nginx-1.25.5.tar.gz` SHA256:`2fe2294f8af4144e7e842eaea884182a84ee7970e...`                               |
| Tarball de código-fonte (corrigido)      | `https://nginx.org/download/nginx-1.30.1.tar.gz` SHA256:`99765000d974896b31ca5882d8c279ce3fe7ef6f...`                                |
| SHA256 do arquivo vulnerável      | `c4b10c95b00e43d731a61f2380d406155e037f3cfb40a3bf58711ecefddc799a`                                                                   |
| SHA256 do arquivo corrigido           | `a6182175a22d88f66b9a61ae051bdcfece10d1bb2e643f7f175eb07589143403`                                                                   |
| Método de derivação           | `diff src/http/ngx_http_script.c` entre os dois tarballs (confirmado idêntico ao commit upstream)                                  |
| Linhas alteradas               | 1 (apenas adição)                                                                                                                    |
| Patch aplica-se limpo       | Verificado: `patch --dry-run -p1 < build/patches/CVE-2026-42945.patch` termina com 0                                                         |
| Verificação em tempo de compilação     | `build.sh` verifica que `e->is_args = 0` está presente no código-fonte após o patch, aborta a compilação caso contrário                                        |
| Atestado em tempo de compilação      | Escrito em `artifacts/patch-attestation.json` durante a compilação                                                                             |
| Teste de regressão             | `test/test_cve_2026_42945.py` - exercita o caminho de código vulnerável                                                                   |
| Script de verificação do patch   | `make verify-patch` - redereiva independentemente o patch dos tarballs upstream                                                      |

**Como o patch foi criado:**

1. Baixou `nginx-1.25.5.tar.gz` (SHA256 verificado contra o hash fixado)
2. Baixou `nginx-1.30.1.tar.gz` (SHA256 verificado: `99765000d974896b31ca5882d8c279ce3fe7ef6f5c6f9f0a967ed7fd3407f9cc`)
3. Executou `diff src/http/ngx_http_script.c` entre as duas árvores
4. O diff produziu exatamente uma linha - a adição de `e->is_args = 0;`
5. Extraído como um patch diff unificado com linhas de contexto
6. Verificado que o patch se aplica limpo ao nginx 1.25.5
7. Ambas as árvores de código-fonte são mantidas em `research/` para verificação independente

**Teste de regressão:**

O conjunto de testes `test/test_cve_2026_42945.py` exercita o caminho de código
vulnerável enviando solicitações através de regras de reescrita que manipulam
o estado da string de consulta (`is_args`). Ele valida:

- Redirecionamentos de reescrita com `?` final (remoção de consulta) produzem respostas bem formadas
- Reescritas encadeadas que alternam o estado `is_args` não travam o worker
- Strings de consulta longas (4KB+) não causam artefatos de estouro de buffer (bytes nulos, cabeçalhos Location muito longos)
- 100 solicitações mistas rápidas não causam travamentos do worker
- O processo worker sobrevive a todos os casos de teste sem SIGSEGV ou corrupção de heap

Execute: `make test-cve`

**Comportamento do scanner:**

Como a versão do pacote permanece `1.25.5`, os scanners sinalizarão CVE-2026-42945
quando o aviso estiver presente em seu banco de dados. Isso é esperado - scanners
correspondem por `(package-name, upstream-version)` e não podem inspecionar se o
código-fonte foi corrigido. O documento VEX suprime essa descoberta com justificativa
legível por máquina. A supressão do scanner é um mecanismo de comunicação, não a
evidência principal de correção. A evidência principal é a cadeia de proveniência do
patch e o teste de regressão acima.

---

## VEX (Vulnerability Exploitability eXchange)

### Por que o VEX é necessário

Scanners identificam pacotes por `(nome, versão)` do banco de dados dpkg.
Nosso pacote é `nginx 1.25.5-1~bookworm+echo1` - scanners analisam isso como
versão upstream 1.25.5 e sinalizam todos os CVEs que afetam nginx ≤ 1.25.5.

Para correções retroportadas, o scanner não pode determinar que o código vulnerável
foi corrigido. A versão permanece intencionalmente 1.25.5 para preservar a
compatibilidade do pacote. O VEX fornece um atestado legível por máquina de que o
CVE foi tratado, vinculado a evidências verificáveis.

### Cadeia de credibilidade do VEX

A declaração VEX para CVE-2026-42945 NÃO é mera burocracia. Ela é apoiada por:

1. **Proveniência do patch** - `build/patches/CVE-2026-42945.provenance.json`
   documenta a fonte upstream exata, o método de derivação e os hashes dos arquivos
2. **Verificação em tempo de compilação** - `build.sh` assegura que o marcador de correção
   está presente no código-fonte compilado, abortando a compilação em caso de falha
3. **Atestado de compilação** - `artifacts/patch-attestation.json` registra
   hashes de arquivos pré/pós-patch gerados durante a compilação
4. **Teste de regressão** - `test/test_cve_2026_42945.py` exercita o caminho de código
   vulnerável sem travamento ou corrupção
5. **Rederivação independente** - `make verify-patch` baixa ambos os tarballs
   upstream e demonstra que o patch commitado é o diff mínimo de segurança

### O que o VEX cobre

| CVE            | Status  | Justificativa                 | Evidência                                                   |
| -------------- | ------- | ----------------------------- | ---------------------------------------------------------- |
| CVE-2026-42945 | `fixed` | `vulnerable_code_not_present` | Patch retroportado + proveniência + teste de regressão + gate de compilação |

O escopo do VEX é intencionalmente restrito: apenas CVEs que este projeto
remediou ativamente com evidências verificáveis são cobertos. Descobertas que são
meramente "esperadas para serem mitigadas" pela versão distribuída não são
suprimidas - isso evita usar o VEX como uma ferramenta de supressão genérica.

### Como funciona

O script `build/generate-vex.sh` produz um documento OpenVEX v0.2.0.
O comando do scanner para aplicá-lo:```bash
# Without VEX - CVE is reported (version-based match):
grype nginx-fixed > fixed-grype.txt

# With VEX - CVE is suppressed with justification:
grype nginx-fixed --vex vex.json > fixed-grype-vex.txt

Evidência do scanner

A supressão VEX é observável nos artefatos de varredura salvos. Note que as bases de dados do scanner são reconstruídas periodicamente e a presença de CVE pode variar entre execuções. Os ficheiros salvos baseline-grype.txt e fixed-grype.txt são evidências pontuais. A validade do documento VEX NÃO depende do estado da BD do scanner – é verificável independentemente através da cadeia de proveniência acima.


Integridade do scanner

Decisão de nomeação do pacote

O pacote chama-se nginx (não nginx-custom). Isto é crítico porque:

  1. Relato honesto: se o pacote fosse renomeado, os scanners não o reconheceriam como nginx e TODAS as CVEs do nginx desapareceriam silenciosamente – incluindo as não corrigidas. Isso é uma falsa sensação de segurança.
  2. Demonstração VEX: o VEX só pode suprimir uma CVE que o scanner realmente reporta. Pacotes renomeados tornam o VEX desnecessário (e não testável).
  3. Gestão de pacotes: nomeá-lo nginx permite que ele satisfaça dependências e seja gerido pelas ferramentas padrão do Debian.

Volatilidade da base de dados do scanner

As bases de dados de avisos do scanner são reconstruídas periodicamente. Uma CVE presente numa semana pode estar ausente na seguinte. Este projeto NÃO depende da saída do scanner como prova primária de remediação. A cadeia de evidências é:

  1. Proveniência do patch (verificável independentemente de qualquer scanner)
  2. Atestação em tempo de compilação (gerada durante a compilação)
  3. Teste de regressão (exercita o caminho de código vulnerável)
  4. Supressão VEX (reconhecimento ao nível do scanner)

Os ficheiros de varredura salvos são apenas evidências pontuais.

O que os scanners veem (imagem corrigida)

PackageVersionCVE-2024-6119CVE-2026-42945
libssl33.0.20-1~deb12u1Não reportado (corrigido pela versão)n/d
nginx1.25.5-1~bookworm+echo1n/dReportado quando na BD (backport invisível ao scanner)

Com --vex vex.json, o achado da CVE-2026-42945 (se presente na BD do scanner) é suprimido. A validade do documento VEX é estabelecida pela cadeia de proveniência (derivação do patch, atestação de compilação, teste de regressão), não apenas pela saída do scanner.


Teste de compatibilidade

O conjunto de testes (test/compat.py) inicia tanto nginx:1.25-bookworm como nginx-fixed como contentores Docker e compara o comportamento. Cada asserção testa diretamente a imagem corrigida em execução contra a imagem oficial em execução.

89 asserções. Todas aprovadas.

Além disso, test/test_cve_2026_42945.py fornece ~20 asserções direcionadas especificamente para a correção da CVE backportada (ver "Teste de regressão" acima).

CategoriaO que é comparadoContagem de asserções
Metadados da imagemEntrypoint, Cmd, ExposedPorts, User, StopSignal, Env, Labels7
Argumentos nginx -VFlags de configuração idênticas (normalizadas para o caminho -ffile-prefix-map)1
Módulos dinâmicosTodos os 12 ficheiros .so oficiais presentes + ligação simbólica /etc/nginx/modules13
Binário nginx-debug--with-debug e --with-http_v3_module presentes no debug -V2
Layout do sistema de ficheiros~20 caminhos chave, ligações simbólicas de log para /dev/stdout e /dev/stderr~20
Configuração de utilizador/grupoSaída de getent passwd/group nginx idêntica2
Ficheiros de configuração dpkgdpkg-query reporta default.conf e nginx.conf como ficheiros de configuração1
Pacote fornecedpkg -s nginx mostra Provides: nginx-r1.25.51
Binário NJSnjs -v retorna 0.8.41
Ponto de entrada IPv610-listen-on-ipv6-by-default.sh altera default.conf de forma idêntica1
Modelos EnvsubstSubstituição de template NGINX_ENVSUBST produz a mesma saída1
Logs de inicializaçãoTodas as linhas de log do ponto de entrada correspondem ao formato oficial1
HTTP GET/HEAD/POSTCorpo da resposta, estado, cabeçalhos correspondem para múltiplos endpoints~10
Requisição malformadaResposta de erro TCP bruta idêntica1
Servição de ficheiros estáticosFicheiro montado servido com conteúdo correto1
Terminação TLSHTTPS com certificado autoassinado funciona de forma idêntica1
Encerramento graciosoSIGQUIT produz saída limpa (código 0)1
Recarregamento de configuração

O que NÃO é testado

  • Comportamento do protocolo HTTP/3 QUIC (apenas a presença da flag --with-http_v3_module é verificada; não é enviado tráfego UDP/QUIC)
  • Características de desempenho ou latência sob carga
  • Todas as possíveis diretivas de configuração do nginx
  • Comportamento de módulos dinâmicos raramente usados (GeoIP, image_filter, XSLT) além de verificar se os ficheiros .so estão presentes no disco

Executar:```bash make test

root@kitploit:~
## Tamanho da Imagem

| Imagem                 | Tamanho (arm64, `docker images`) |
| --------------------- | -------------------------------- |
| `nginx:1.25-bookworm` | ~278 MB                          |
| `nginx-fixed`         | ~332 MB                          |

A imagem corrigida é maior que a upstream. Isso é esperado: a imagem oficial
usa binários pré-compilados em camadas otimizadas, enquanto a nossa instala
artefatos de compilação e dependências completas de tempo de execução (incluindo
bibliotecas para todos os 12 módulos dinâmicos) em uma base `debian:bookworm-slim`.
A diferença de tamanho é um compromisso para obter controle de compilação no
nível fonte, não uma regressão de funcionalidade.

---

## Avaliação de Risco Residual

### CVEs restantes na imagem corrigida

A imagem corrigida ainda contém vulnerabilidades em bibliotecas do sistema não
tratadas por este projeto (ponto no tempo; execute `make scan` para estado atual):

| Nível de Risco | Pacote         | CVE(s)                                      | Observações                                                                                                     |
| -------------- | -------------- | ------------------------------------------- | --------------------------------------------------------------------------------------------------------------- |
| Alto           | nginx          | CVE-2023-44487                              | Mitigado no nginx ≥ 1.25.3 conforme upstream; scanner ainda sinaliza porque o rastreador Debian não fechou o aviso |
| Crítico        | libgnutls30    | CVE-2026-42010, CVE-2026-33845              | Nenhuma correção disponível no bookworm                                                                         |
| Crítico        | libc6/libc-bin | CVE-2026-5450                               | Não será corrigido nesta versão do Debian                                                                       |
| Alto           | libc6/libc-bin | CVE-2026-5928, CVE-2026-5435, CVE-2026-4437 | glibc não será corrigido no bookworm                                                                            |
| Alto           | dpkg           | CVE-2025-6297, CVE-2026-2219                | Corrigível (atualizar para 1.21.23)                                                                             |
| Alto           | libldap-2.5-0  | CVE-2023-2953                               | Não será corrigido                                                                                              |
| Alto           | curl/libcurl4  | CVE-2026-5773, CVE-2026-6276                | Não será corrigido                                                                                              |
| Alto           | ncurses        | CVE-2025-69720                              | Não será corrigido                                                                                              |

Estas são herdadas do `debian:bookworm-slim` e estão fora do escopo da
remediação de CVEs focada no nginx deste projeto.

### Limitações desta abordagem

1. **Não hermético.** A imagem base e os pacotes apt são resolvidos no momento
   da compilação a partir dos repositórios Debian ativos. Fixar o SHA da imagem
   base e usar snapshots apt melhoraria a reprodutibilidade.
2. **Nenhum teste comportamental de QUIC.** O suporte a HTTP/3 é compilado
   (verificado por flag), mas nenhum tráfego QUIC é exercido no conjunto de testes.
3. **Nenhuma validação de desempenho.** O teste de 50 requisições simultâneas
   prova correção, não taxa de transferência ou equivalência de latência.
4. **Apenas carregamento de módulos.** Módulos dinâmicos (GeoIP, image_filter,
   XSLT) são verificados como presentes e carregáveis, mas seu comportamento
   funcional não é exercido além do carregamento básico.
5. **Evidência de arquitetura única.** Os testes são executados apenas na
   arquitetura do host de compilação (arm64 no desenvolvimento; precisaria de CI
   para multi-arquitetura).

### Melhorias futuras (não implementadas)

1. Fixar o digest da imagem base e usar URLs de snapshot apt para compilações herméticas.
2. Remover pacotes desnecessários (ncurses, util-linux) puxados como dependências transitivas.
3. Gerar SBOM (alvo `make sbom` existe, usa `syft`) e vincular ao VEX via purl do SBOM.
4. Assinar a imagem com `cosign` e anexar VEX + SBOM + atestado de patch como atestações OCI.
5. Adicionar pipeline de CI (GitHub Actions) para compilação → teste → varredura → envio automatizados.
6. Adicionar teste de protocolo HTTP/3 (cliente QUIC, configuração de certificado, porta UDP).
7. Considerar base distroless para eliminar completamente o ruído de CVEs no nível do SO.
8. Adicionar variante de compilação ASan (AddressSanitizer) para provar ausência de corrupção de heap sob carga de teste.

---

## Flags de Compilação vs. Upstream

As flags `./configure` em `build.sh` são idênticas às relatadas por
`nginx -V` na imagem oficial `nginx:1.25-bookworm`. Isso é verificado
por `test/compat.py::test_nginx_version`, que normaliza a
diferença `-ffile-prefix-map=<path>` e compara as flags restantes
caractere por caractere.

Flags notáveis (presentes em ambas as imagens):

| Flag / recurso             | Propósito                                                                    |
| -------------------------- | ---------------------------------------------------------------------------- |
| `--prefix=/etc/nginx`      | Convenção de imagem Docker (não o `/usr/share/nginx` do Debian)              |
| `--with-http_v3_module`    | Stack QUIC embutido (independente da API QUIC do OpenSSL)                    |
| `--with-pcre` (PCRE2)      | Linka contra `libpcre2-8-0` (não o PCRE1 legado)                             |
| `--with-stream`            | Módulo proxy TCP/UDP (dinâmico)                                              |
| Hardening de segurança     | `-fstack-protector-strong`, `FORTIFY_SOURCE=2`, RELRO, PIE                   |
| Módulos dinâmicos (×12)    | geoip, stream_geoip, image_filter, xslt, http_js, stream_js (release + debug)|
| `--with-debug` (debug)     | Binário nginx-debug compilado separadamente com flags idênticas + debug      |

---

## Pacote Debian

Os metadados do pacote `.deb`:```
Package: nginx
Version: 1.25.5-1~bookworm+echo1
Depends: libc6 (>= 2.34), libcrypt1 (>= 1:4.1.0), libpcre2-8-0 (>= 10.22),
         libssl3 (>= 3.0.14), zlib1g (>= 1:1.2.11), libgeoip1 (>= 1.6.12),
         libgd3 (>= 2.1.0~alpha~), libxml2 (>= 2.7.4), libxslt1.1 (>= 1.1.25),
         lsb-base (>= 3.0-6), adduser
Provides: httpd, nginx, nginx-r1.25.5
Conflicts: nginx-common, nginx-core
Replaces: nginx-common, nginx-core

Key packaging decisions:

  • libssl3 (>= 3.0.14) - requer explicitamente OpenSSL corrigido (upstream declara >= 3.0.0). Este é o mecanismo que aplica a correção da CVE-2024-6119.
  • Provides: nginx-r1.25.5 - satisfaz pacotes de módulos dinâmicos que dependem deste pacote virtual.
  • Conffiles registados com dpkg: /etc/nginx/nginx.conf e /etc/nginx/conf.d/default.conf. Isto é necessário para a verificação dpkg-query --showformat do script de entrypoint IPv6.
  • postinst cria utilizador/grupo nginx com uid/gid 101 e shell /bin/false (correspondente ao upstream - verificado na suite de testes).
  • Inclui: binário nginx, binário nginx-debug, todos os 12 módulos .so, árvore completa de configuração /etc/nginx, ficheiros init.d/systemd/logrotate, página man, HTML por defeito, e o symlink /etc/nginx/modules → /usr/lib/nginx/modules.

Decisões de Design e Compensações

  1. Pacote nomeado nginx, não nginx-custom. Se renomeado, os scanners não o associariam aos avisos de nginx - todos os CVEs do nginx desapareceriam silenciosamente dos relatórios, incluindo os não corrigidos. Manter o nome nginx garante relatórios honestos do scanner e torna o VEX significativo.

  2. VEX requer visibilidade do CVE. O propósito do VEX é suprimir um CVE que já foi reportado. Se o scanner não encontrar o CVE (devido a renomeação do pacote ou temporização da base de dados), o VEX não tem nada a suprimir.

  3. libssl3 (>= 3.0.14) como dependência do pacote. Em vez de esperar que a base de execução tenha por acaso um OpenSSL corrigido, o .deb exige uma versão que contenha a correção para CVE-2024-6119.

  4. Volatilidade da base de dados do scanner. As bases de dados de avisos são reconstruídas periodicamente. Um CVE presente numa semana pode estar ausente na seguinte. Os ficheiros de digitalização guardados neste repositório são evidências pontuais; as digitalizações atuais podem diferir.

  5. Ferramentas de IA utilizadas. O GitHub Copilot auxiliou na análise de patches (comparação das árvores de código fonte do nginx 1.25.5 e 1.30.1), na estrutura da suite de testes, na identificação do problema de evasão do scanner devido à renomeação do pacote, e na elaboração do documento VEX. Os detalhes de empacotamento Debian e as heurísticas de correspondência de versão do Grype exigiram verificação manual.

Baixar ferramenta
SIGHUP aplica nova configuração sem reinício
1
Requisições concorrentes50 requisições paralelas retornam todas 2001