Infrastructure configuration
Every scanner in this group reads a configuration file as plain text and runs regular expressions over it. A Dockerfile, a Kubernetes manifest, a Terraform file and a shell script are four different languages, but the scanner treats each as one string: pick the file by name or marker, match the rule, skip the placeholders, report a severity.
How this group works
Four files, one shape. Each step adds a column: how the file is picked, what is searched for, what is skipped and what comes out.
1Four kinds of configuration file, four scanners, one habit. Each scanner takes the text of a file from the repository snapshot and nothing else: no running app, no credentials, no network.
2Discovery is by name. A Dockerfile by its file name, a Terraform file by its extension, a script by .sh or .bash. Kubernetes manifests have no fixed name, so the marker apiVersion: and seven folder names stand in.
3The rule is a regular expression over the text. Some look for a bad line, some for a bad line inside a block, and some for a good line that is missing. None of them builds a tree of the file first.
4Each rule has a guard. Placeholders, allowed ports, development paths and variable references are skipped so that a template or a public web port does not turn into a finding.
5A match becomes a finding with a fixed severity and a fixed confidence from the scanner's configuration. The finding names the file; the scanners in this group do not record a line number.
6That is the whole shape. It is cheap, it runs on every scan, quick or deep, and it cannot tell a development default from a production one. The per-scanner pages show where each guard sits and what each one misses.
Scanners in this group
Docker
Six Dockerfile rules and three compose rules over one string: root, unpinned tags, database ports, ENV secrets, remote ADD, privileged mode.
Kubernetes
Manifests found by apiVersion and folder name, seven regular expressions for dangerous settings, and a separate check for Helm values files.
IaC (Terraform)
Every .tf and .tfvars file: open security groups, wildcard IAM, secret defaults, public buckets, and the ports and thresholds that are allowed.
Shell scripts
Eight text rules for .sh and .bash: hardcoded secrets, curl piped to a shell, eval, chmod 777, missing set -e, echoed secrets, curl -k.
At a glance
| Scanner | What it looks at | What it reports | Severity | Needs |
|---|---|---|---|---|
| Docker scanner | Dockerfiles (4 names) and compose files (6 names) | Root, unpinned base, sensitive ports, ENV secrets, remote ADD, no HEALTHCHECK; weak password, privileged, published database port | Low to Critical | Repository |
| Kubernetes scanner | YAML with apiVersion:, plus 7 manifest folders; Helm values.yaml | Privileged, root, host namespaces, ALL capabilities, env secrets, image tag, LoadBalancer; Helm plaintext secrets | Low to Critical | Repository (folder scan needs the checkout on disk) |
| IaC scanner | .tf and .tfvars | Open ingress, wildcard IAM, secret defaults, public S3, Secrets Manager recovery, ALB HTTP, ECS public IP, log retention | Low to Critical | Repository |
| Shell script scanner | .sh and .bash | Hardcoded secrets and AWS account IDs, curl to shell, chmod, eval, missing set -e, echoed secrets, curl -k | Low to High | Repository |
Why this class matters
Configuration files decide what an attacker gets after the first foothold. A container that runs as root, a pod that is privileged, an IAM policy that grants everything and a script that runs fetched code each turn a small bug into a large one. They are also the cheapest class to find: the evidence is already in the repository, so no running system is needed.
Tesla (2018). An unsecured Kubernetes dashboard led to AWS credentials and cryptocurrency miners. Twitch (2021). An AWS misconfiguration contributed to the leak of its entire source code. Accenture (2017). Four public S3 buckets exposed API data, credentials and decryption keys. SolarWinds (2020). Build scripts that run unverified content are high-risk targets.