
layerleak – o Scanner de Segredos do Docker Hub
Consulte CONTRIBUTING.md para diretrizes de contribuição.
O site publicado é construído a partir de web/ no branch main por .github/workflows/pages.yml. A fonte da documentação e a demonstração simulada do navegador estão ambas sob esse diretório.
Pré-requisitos:
Instale com Go:
go install github.com/brumbelow/layerleak@latest
layerleak --help
O destino de instalação canônico é a raiz do módulo. Para fixar uma versão explicitamente:
go install github.com/brumbelow/[email protected]
Substitua v1.0.0 pela tag v1.x.y publicada desejada.
Certifique-se de que seu diretório GOBIN ou GOPATH/bin esteja no PATH.
O caminho do módulo é github.com/brumbelow/layerleak, então go install @latest resolve para a tag v1.x.y mais alta publicada. Uma versão v2.x.y do módulo exigiria que o caminho do módulo mudasse para github.com/brumbelow/layerleak/v2. Binários instalados via módulo reportam a versão do módulo resolvida através de layerleak --version; compilações a partir de checkout local reportam a versão que o Go incorpora para o checkout, caindo para dev quando nenhuma versão de módulo está disponível.
Compile a partir do código-fonte:
git clone https://github.com/brumbelow/layerleak.git
cd layerleak
go build -o layerleak .
./layerleak --help
Execute a API com uma imagem de contêiner:
docker pull ghcr.io/brumbelow/layerleak:latest
docker run --rm \
-p 8080:8080 \
-e LAYERLEAK_DATABASE_URL='postgres://<user>:<password>@<host>:5432/layerleak?sslmode=disable' \
ghcr.io/brumbelow/layerleak:latest
A imagem do contêiner executa a API por padrão e define LAYERLEAK_API_ADDR=0.0.0.0:8080.
Configuração de ambiente opcional:
cp .env.example .env
Configuração de resultados e banco de dados:
export LAYERLEAK_LOG_LEVEL=info
export LAYERLEAK_FINDINGS_DIR=findings
export LAYERLEAK_API_ADDR=127.0.0.1:8080
export LAYERLEAK_PERSIST_RAW_SECRETS=0
export LAYERLEAK_TAG_PAGE_SIZE=100
export LAYERLEAK_HTTP_TIMEOUT=30s
export LAYERLEAK_MAX_FILE_BYTES=1048576
export LAYERLEAK_MAX_LAYER_BYTES=536870912
export LAYERLEAK_MAX_LAYER_ENTRIES=50000
export LAYERLEAK_MAX_MANIFEST_BYTES=0
export LAYERLEAK_MAX_CONFIG_BYTES=0
export LAYERLEAK_MAX_TAG_RESPONSE_BYTES=8388608
export LAYERLEAK_MAX_REPOSITORY_TAGS=0
export LAYERLEAK_MAX_REPOSITORY_TARGETS=0
export LAYERLEAK_REGISTRY_REQUEST_ATTEMPTS=2
# Sobrescritas opcionais de registro; geralmente deixe não definido.
export LAYERLEAK_REGISTRY_BASE_URL=
export LAYERLEAK_REGISTRY_AUTH_URL=
export LAYERLEAK_DATABASE_URL=postgres://postgres:postgres@localhost:5432/layerleak?sslmode=disable
As mesmas variáveis e seus padrões estão em .env.example, que é a fonte da verdade para valores padrão.
| Variável | Padrão | Propósito |
|---|---|---|
LAYERLEAK_LOG_LEVEL | info | Nível de log: debug, info, warn ou error. |
LAYERLEAK_FINDINGS_DIR | não definido | Onde escrever arquivos de resultados JSON. Se não definido, assume findings/ sob o pai mais próximo contendo go.mod, caindo para o diretório de trabalho atual. |
LAYERLEAK_API_ADDR | 127.0.0.1:8080 | Endereço de ligação para o servidor da API. A imagem do contêiner sobrescreve para 0.0.0.0:8080. |
LAYERLEAK_PERSIST_RAW_SECRETS | 0 | Defina como 1 para escrever valores brutos de segredos e trechos brutos de contexto no disco e no Postgres. Os resultados permanecem ocultados por padrão. |
LAYERLEAK_HTTP_TIMEOUT | 30s | Tempo limite por requisição para cada chamada de registro (manifestos, blobs, páginas de tags, tokens de autenticação). Aceita qualquer duração Go (30s, 2m, 1h). |
LAYERLEAK_MAX_FILE_BYTES | 1048576 (1 MiB) | Máximo de bytes descomprimidos armazenados em buffer por arquivo dentro de uma camada. Arquivos maiores que isso são ignorados como muito grandes. Deve ser maior que zero. |
LAYERLEAK_MAX_LAYER_BYTES | 536870912 (512 MiB) | Máximo de bytes do fluxo de camada descomprimido por camada. 0 desabilita o limite. |
LAYERLEAK_MAX_LAYER_ENTRIES | 50000 | Máximo de entradas tar por camada. 0 desabilita o limite. |
LAYERLEAK_MAX_MANIFEST_BYTES | 0 | Máximo de bytes do corpo do manifesto. 0 desabilita o limite. |
LAYERLEAK_MAX_CONFIG_BYTES | 0 | Máximo de bytes do corpo da configuração de imagem. 0 desabilita o limite. |
LAYERLEAK_MAX_TAG_RESPONSE_BYTES | 8388608 (8 MiB) | Máximo de bytes por página de resposta da lista de tags do registro. 0 desabilita o limite. |
LAYERLEAK_TAG_PAGE_SIZE | 100 | Tamanho da página da lista de tags do registro para varreduras em todo o repositório. |
LAYERLEAK_MAX_REPOSITORY_TAGS | 0 | Máximo de tags enumeradas por varredura de repositório. 0 desabilita o limite. |
LAYERLEAK_MAX_REPOSITORY_TARGETS | 0 | Máximo de alvos distintos resolvidos por varredura de repositório. 0 desabilita o limite. |
LAYERLEAK_REGISTRY_REQUEST_ATTEMPTS | 2 | Número de tentativas (incluindo a primeira) para cada requisição de registro. |
LAYERLEAK_REGISTRY_BASE_URL | não definido | Sobrescrita opcional. Normalmente o layerleak deriva isso de cada referência de imagem; defina apenas para forçar varreduras através de um proxy ou endpoint alternativo. |
LAYERLEAK_REGISTRY_AUTH_URL | não definido | Sobrescrita opcional. Normalmente descoberto a partir do desafio WWW-Authenticate do registro. |
LAYERLEAK_DATABASE_URL | não definido | Se definido, o layerleak escreve varreduras no Postgres e falha o comando se a persistência não for bem-sucedida. |
Quando qualquer um dos limites MAX_* é definido como um valor positivo, excedê-lo falha a varredura com um erro claro em vez de truncar o trabalho silenciosamente.
Comportamento dos resultados: