Compare commits

...

893 Commits

Author SHA1 Message Date
Teppei Fukuda
7912f585a3 feat(vuln): support dependency graph for RHEL/CentOS (#3094)
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
2022-10-31 11:07:41 +02:00
Teppei Fukuda
9468056c0f feat(vuln): support dependency graph for dpkg and apk (#3093)
Co-authored-by: Masahiro331 <m_fujimura@r.recruit.co.jp>
2022-10-31 08:54:42 +02:00
Teppei Fukuda
7cc83cc2f6 perf(license): enable license classifier only with "--license-full" (#3086) 2022-10-28 20:16:16 +03:00
AndrewCharlesHay
5b975de234 feat(report): add secret scanning to ASFF template (#2860)
Co-authored-by: AMF <work@afdesk.com>
2022-10-28 08:27:10 +03:00
Peter Engelbert
b6cef12534 feat: Allow override of containerd namespace (#3060)
Signed-off-by: Peter Engelbert <pmengelbert@gmail.com>
2022-10-27 16:43:55 +03:00
behara
07651480fa fix(vuln): In alpine use Name as SrcName (#3079) 2022-10-27 12:59:28 +03:00
DmitriyLewen
9e649b87b5 fix(secret): Alibaba AccessKey ID (#3083) 2022-10-27 12:58:14 +03:00
Teppei Fukuda
af89249dea refactor(k8s): custom reports (#3076) 2022-10-26 00:02:33 +03:00
Aibek
f4e970f374 fix(misconf): Bump in-toto-golang with correct CycloneDX predicate (#3068)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-10-25 23:41:27 +03:00
Shubham Palriwala
8ae4627941 feat(image): add support for passing architecture and OS (#3012)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-10-25 22:03:50 +03:00
DmitriyLewen
0501e70375 test: disable containerd integration tests for non-amd64 arch (#3073) 2022-10-25 21:05:54 +03:00
bgoareguer
a377c8d04f feat(server): Add support for client/server mode to rootfs command (#3021) 2022-10-25 21:04:29 +03:00
Teppei Fukuda
02a73f0138 feat(vuln): support non-packaged binaries (#3019) 2022-10-25 20:02:53 +03:00
chenk
18581f345b feat: compliance reports (#2951) 2022-10-25 19:42:01 +03:00
saso
63b8e4d6a0 fix(flag): disable flag parsing for each plugin command (#3074) 2022-10-25 19:02:42 +03:00
DmitriyLewen
cbedd712db feat(nodejs): add support dependency location for yarn.lock files (#3016) 2022-10-25 11:19:21 +03:00
Liam Galvin
b22e37e0c6 chore: Switch github.com/liamg dependencies to github.com/aquasecurity (#3069) 2022-10-25 11:17:47 +03:00
Jose Donizetti
9b0e9794cb feat: add k8s components (#2589)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-10-24 14:51:02 +03:00
behara
5e25182c98 fix(secret): update the regex for secrets scanning (#2964)
Co-authored-by: jyothikumar <behara.jyothi-kumar@aquasec.com>
2022-10-24 14:42:54 +03:00
dependabot[bot]
9947e5111c chore(deps): bump github.com/samber/lo from 1.27.1 to 1.28.2 (#2979)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
2022-10-24 11:30:39 +03:00
Jose Donizetti
d2a15a7377 fix: bump trivy-kubernetes (#3064) 2022-10-23 21:07:41 +03:00
Shahar Naveh
f2efc9c554 docs: fix missing 'image' subcommand (#3051) 2022-10-21 12:44:12 +03:00
tspearconquest
34653c711b chore: Patch golang x/text vulnerability (#3046)
Signed-off-by: Thomas Spear <tspear@conquestcyber.com>
2022-10-21 12:43:50 +03:00
Itay Shakury
e252ea83e0 chore: add licensed project logo (#3058) 2022-10-21 07:22:00 +03:00
MaineK00n
439d216634 feat(ubuntu): set Ubuntu 22.10 EOL (#3054) 2022-10-20 21:52:44 +03:00
Matias Insaurralde
9f5113a920 refactor(analyzer): use strings.TrimSuffix instead of strings.HasSuffix (#3028) 2022-10-20 14:45:33 +03:00
Craig Andrews
c1e24d5344 feat(report): Use understandable value for shortDescription in SARIF reports (#3009)
Signed-off-by: Craig Andrews <candrews@integralblue.com>
Co-authored-by: AMF <work@afdesk.com>
2022-10-20 12:54:59 +03:00
Sen
212af07e27 docs(misconf): fix typo (#3043) 2022-10-20 08:51:37 +03:00
Owen Rumney
68f374ac9a feat: add support for scanning azure ARM (#3011)
Signed-off-by: Owen Rumney <owen.rumney@aquasec.com>
2022-10-13 20:24:14 +03:00
Craig Andrews
d35c668f5c feat(report): add location.message to SARIF output (#3002) (#3003)
Signed-off-by: Craig Andrews <candrews@integralblue.com>
Co-authored-by: AMF <work@afdesk.com>
2022-10-12 16:07:58 +03:00
dependabot[bot]
2150ffc701 chore(deps): bump github.com/aws/aws-sdk-go from 1.44.95 to 1.44.109 (#2980)
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
2022-10-12 15:47:31 +03:00
DmitriyLewen
ca434f7f26 feat(nodejs): add dependency line numbers for npm lock files (#2932) 2022-10-12 15:22:34 +03:00
Hirotaka Tagawa / wafuwafu13
a8ff5f06b5 test(fs): add --skip-files, --skip-dirs (#2984) 2022-10-12 15:20:56 +03:00
6543
561b2e7566 docs: add Woodpecker CI integrations example (#2823)
Co-authored-by: Sebastian Crane <seabass-labrax@gmx.com>
2022-10-12 15:01:59 +03:00
dependabot[bot]
4a3583da95 chore(deps): bump github.com/sigstore/rekor from 0.12.0 to 0.12.2 (#2981)
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
2022-10-12 13:45:56 +03:00
dependabot[bot]
4be9eebf07 chore(deps): bump github.com/liamg/memoryfs from 1.4.2 to 1.4.3 (#2976)
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
2022-10-12 13:44:35 +03:00
dependabot[bot]
a260d35dc1 chore(deps): bump github.com/spf13/viper from 1.12.0 to 1.13.0 (#2975)
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
2022-10-12 13:37:20 +03:00
dependabot[bot]
558189f763 chore(deps): bump github.com/caarlos0/env/v6 from 6.10.0 to 6.10.1 (#2982)
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
2022-10-12 13:36:30 +03:00
DmitriyLewen
c2eb6ee301 fix(sbom): ref generation if serialNumber is empty when input is cyclonedx file (#3000) 2022-10-11 21:25:46 +03:00
DmitriyLewen
68f79526bb fix(java): don't stop parsing jar file when wrong inner jar is found (#2989)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-10-11 12:45:44 +03:00
DmitriyLewen
be78da6c40 fix(sbom): use nuget purl type for dotnet-core (#2990)
* use nuget prefix for dotnet-core

* refactor
2022-10-11 12:23:43 +03:00
saso
92b5a1931e perf: retrieve rekor entries in bulk (#2987) 2022-10-09 10:53:00 +03:00
Liam Galvin
babd7e7526 feat(aws): Custom rego policies for AWS scanning (#2994) 2022-10-06 12:51:45 +03:00
AndrewCharlesHay
8ad9b8a939 docs: jq cli formatting (#2881)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-10-02 10:11:03 +03:00
Kyriakos Georgiou
a78684c340 docs(repo): troubleshooting $TMPDIR customization (#2985) 2022-10-02 10:05:09 +03:00
dependabot[bot]
7309ed0a5b chore(deps): bump actions/cache from 3.0.8 to 3.0.9 (#2969) 2022-10-02 10:03:49 +03:00
dependabot[bot]
9515a5ce8b chore(deps): bump actions/stale from 5 to 6 (#2970) 2022-10-02 10:03:26 +03:00
dependabot[bot]
955aff66df chore(deps): bump sigstore/cosign-installer from 2.5.1 to 2.7.0 (#2971) 2022-10-02 10:02:42 +03:00
dependabot[bot]
db56d238fd chore(deps): bump helm/chart-testing-action from 2.3.0 to 2.3.1 (#2972) 2022-10-02 10:02:22 +03:00
dependabot[bot]
05a723246e chore(deps): bump helm/kind-action from 1.3.0 to 1.4.0 (#2973) 2022-10-02 10:01:49 +03:00
afdesk
2c39d4729a chore: run go fmt (#2897) 2022-10-02 09:33:21 +03:00
Crypt Keeper
16a7dc10e0 chore(go): updates wazero to 1.0.0-pre.2 (#2955)
Signed-off-by: Adrian Cole <adrian@tetrate.io>
2022-10-02 09:29:15 +03:00
chavacava
ce4ba7c99c fix(aws): Less function for slice sorting always returns false #2967
Signed-off-by: Salvador Cavadini <salvadorcavadini+github@gmail.com>
2022-10-02 09:28:27 +03:00
DmitriyLewen
4ffe74643e fix(java): fix unmarshal pom exclusions (#2936)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-09-28 19:44:53 +03:00
DmitriyLewen
8b1cee845b fix(java): use fields of dependency from dependencyManagement from upper pom.xml to parse deps (#2943) 2022-09-28 15:32:01 +03:00
chenk
f5cbbb3fde chore: expat lib and go binary deps vulns (#2940)
Signed-off-by: chenk <hen.keinan@gmail.com>
2022-09-28 12:14:29 +03:00
Crypt Keeper
6882bdf561 wasm: Removes accidentally exported memory (#2950)
Signed-off-by: Adrian Cole <adrian@tetrate.io>
2022-09-28 11:12:46 +03:00
DmitriyLewen
6ea9a61cf3 fix(sbom): fix package name separation for gradle (#2906) 2022-09-28 11:11:23 +03:00
DmitriyLewen
3ee4c96f13 docs(readme.md): fix broken integrations link (#2931) 2022-09-28 11:03:20 +03:00
Moniseeta
5745961194 fix(image): handle images with single layer in rescan mergedLayers cache (#2927)
For images with single layer, the layer key was directly being used as merged cache key.
This was posing an issue of data override and any other image having the same layer could get incorrect data.
So, fixed:
1. Even for 1 layer - merged layer key hash will be calculated
2. We will not go with assumption that merged data will have only 1 pkgInfo
3. We are setting a SchemaVersion in blob being generated in ToBlobInfo
2022-09-22 14:46:28 +03:00
DmitriyLewen
e01253d54d fix(cli): split env values with ',' for slice flags (#2926) 2022-09-22 10:11:37 +03:00
Juan Antonio Osorio
0c1a42d4f3 fix(cli): config/helm: also take into account files with .yml (#2928)
YAML files can also have the `.yml` file extension. So the helm config should take that into account.

Signed-off-by: Juan Antonio Osorio <juan.osoriorobles@eu.equinix.com>
2022-09-21 17:08:13 +01:00
DmitriyLewen
237b8dcd06 fix(flag): add file-patterns flag for config subcommand (#2925) 2022-09-21 10:02:58 +03:00
dependabot[bot]
047a0b3d88 chore(deps): bump github.com/open-policy-agent/opa from 0.43.0 to 0.43.1 (#2902)
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
2022-09-19 14:55:16 +03:00
Teppei Fukuda
585985edb3 docs: add Rekor SBOM attestation scanning (#2893)
Signed-off-by: knqyf263 <knqyf263@gmail.com>
2022-09-16 15:43:01 +03:00
Teppei Fukuda
d30fa00adc chore: narrow the owner scope (#2894) 2022-09-16 15:42:31 +03:00
afdesk
38c1513af6 fix: remove a patch number from the recommendation link (#2891) 2022-09-16 12:23:58 +03:00
saso
ba29ce648c fix: enable parsing of UUID-only rekor entry ID (#2887)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-09-16 11:16:41 +03:00
Teppei Fukuda
018eda618b docs(sbom): add SPDX scanning (#2885) 2022-09-16 10:20:40 +03:00
Anais Urlichs
20f1e5991a docs: restructure docs and add tutorials (#2883)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-09-15 21:27:58 +03:00
saso
192fd78ca2 feat(sbom): scan sbom attestation in the rekor record (#2699)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-09-15 20:16:39 +03:00
chenk
597836c3a2 feat(k8s): support outdated-api (#2877) 2022-09-15 13:02:16 +03:00
dependabot[bot]
6c7bd67c04 chore(deps): bump github.com/moby/buildkit from 0.10.3 to 0.10.4 (#2815) 2022-09-15 11:40:54 +03:00
François Poirotte
41270434fe fix(c): support revisions in Conan parser (#2878)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-09-15 11:35:44 +03:00
chenk
b677d7e2e8 feat: dynamic links support for scan results (#2838) 2022-09-15 10:42:33 +03:00
dependabot[bot]
8e03bbb422 chore(deps): bump go.uber.org/zap from 1.22.0 to 1.23.0 (#2818) 2022-09-15 10:16:47 +03:00
George Rodrigues
27005c7d6a docs: update archlinux commands (#2876) 2022-09-15 10:14:53 +03:00
DmitriyLewen
b6e394dc80 feat(secret): add line from dockerfile where secret was added to secret result (#2780)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-09-15 10:13:20 +03:00
Masahiro331
9f6680a1fa feat(sbom): Add unmarshal for spdx (#2868)
Signed-off-by: knqyf263 <knqyf263@gmail.com>
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-09-15 08:39:59 +03:00
dependabot[bot]
db0aaf18e6 chore(deps): bump github.com/aws/aws-sdk-go-v2/config (#2827) 2022-09-14 17:28:14 +03:00
AndrewCharlesHay
bb3220c3de fix: revert asff arn and add documentation (#2852) 2022-09-14 17:27:46 +03:00
AndrewCharlesHay
c51f2b82e4 docs: batch-import-findings limit (#2851) 2022-09-14 17:26:32 +03:00
dependabot[bot]
552732b5d7 chore(deps): bump golang from 1.19.0 to 1.19.1 (#2872) 2022-09-14 17:23:51 +03:00
Masahiro331
3165c376e2 feat(sbom): Add marshal for spdx (#2867)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-09-14 13:36:10 +03:00
Teppei Fukuda
dac2b4a281 build: checkout before setting up Go (#2873) 2022-09-14 13:27:27 +03:00
Teppei Fukuda
39f83afefe chore: bump Go to 1.19 (#2861)
Signed-off-by: knqyf263 <knqyf263@gmail.com>
2022-09-14 11:41:55 +03:00
Carol Valencia
0ce95830c8 docs: azure doc and trivy (#2869)
Co-authored-by: carolina valencia <krol3@users.noreply.github.com>
2022-09-14 09:20:57 +03:00
Owen Rumney
2f37961661 fix: Scan tarr'd dependencies (#2857)
Signed-off-by: Owen Rumney <owen.rumney@aquasec.com>
2022-09-12 14:55:38 +03:00
Carol Valencia
db14ef3cb5 chore(helm): helm test with ingress (#2630)
Co-authored-by: carolina valencia <krol3@users.noreply.github.com>
2022-09-12 12:13:08 +03:00
DmitriyLewen
acb65d565a feat(report): add secrets to sarif format (#2820)
Co-authored-by: AMF <work@afdesk.com>
2022-09-12 12:12:13 +03:00
dependabot[bot]
a18cd7c00a chore(deps): bump azure/setup-helm from 1.1 to 3.3 (#2807) 2022-09-12 12:11:02 +03:00
Teppei Fukuda
2de903ca35 refactor: add a new interface for initializing analyzers (#2835)
Signed-off-by: knqyf263 <knqyf263@gmail.com>
2022-09-12 11:46:53 +03:00
dependabot[bot]
63c3b8ed19 chore(deps): bump github.com/aws/aws-sdk-go from 1.44.77 to 1.44.92 (#2840) 2022-09-08 09:21:40 +03:00
AndrewCharlesHay
6717665ab0 fix: update ProductArn with account id (#2782) 2022-09-08 09:21:05 +03:00
Helge Eichelberg
41a8496716 feat(helm): make cache TTL configurable (#2798)
Signed-off-by: elchenberg <elchenberg@users.noreply.github.com>
2022-09-08 09:12:18 +03:00
Juan Antonio Osorio
0f1f2c1b29 build(): Sign releaser artifacts, not only container manifests (#2789) 2022-09-07 16:56:10 +03:00
Carol Valencia
b389a6f4fc chore: improve doc about azure devops (#2795)
Co-authored-by: carolina valencia <krol3@users.noreply.github.com>
2022-09-07 16:52:53 +03:00
dependabot[bot]
9ef9fce589 chore(deps): bump sigstore/cosign-installer from 2.5.0 to 2.5.1 (#2804) 2022-09-07 16:48:15 +03:00
dependabot[bot]
7b3225d0d8 chore(deps): bump github.com/aws/aws-sdk-go-v2 from 1.16.11 to 1.16.14 (#2828) 2022-09-07 16:47:38 +03:00
dependabot[bot]
37733edc4b chore(deps): bump github.com/aws/aws-sdk-go-v2/service/sts (#2825) 2022-09-07 16:46:01 +03:00
Itay Shakury
44d7e8dde1 docs: don't push patch versions (#2824) 2022-09-07 16:40:28 +03:00
DmitriyLewen
4839075c28 feat: add support for conan.lock file (#2779)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-09-06 21:59:13 +03:00
Teppei Fukuda
6b4ddaaef2 feat: cache merged layers
igned-off-by: knqyf263 <knqyf263@gmail.com>
2022-09-06 11:04:00 +03:00
dependabot[bot]
a18f398ac0 chore(deps): bump helm/chart-testing-action from 2.2.1 to 2.3.0 (#2805) 2022-09-04 12:32:45 +03:00
dependabot[bot]
4dcce14051 chore(deps): bump actions/cache from 3.0.5 to 3.0.8 (#2806) 2022-09-04 12:32:04 +03:00
dependabot[bot]
db4544711a chore(deps): bump github.com/caarlos0/env/v6 from 6.9.3 to 6.10.0 (#2811) 2022-09-04 12:15:53 +03:00
dependabot[bot]
a246d0f280 chore(deps): bump github.com/aquasecurity/table from 1.7.2 to 1.8.0 (#2810) 2022-09-04 12:11:31 +03:00
dependabot[bot]
1800017a9a chore(deps): bump github.com/samber/lo from 1.27.0 to 1.27.1 (#2808) 2022-09-04 12:08:54 +03:00
dependabot[bot]
218e41a435 chore(deps): bump github.com/alicebob/miniredis/v2 from 2.22.0 to 2.23.0 (#2814) 2022-09-04 12:08:13 +03:00
DmitriyLewen
a000adeed0 feat: add support for gradle.lockfile (#2759) 2022-09-01 11:27:36 +03:00
Crypt Keeper
43113bc01f chore(mod): updates wazero to 1.0.0-pre.1 #2791
Signed-off-by: Adrian Cole <adrian@tetrate.io>
2022-09-01 11:09:48 +03:00
jerbob92
5f0bf1445a feat: move file patterns to a global level to be able to use it on any analyzer (#2539) 2022-09-01 11:01:57 +03:00
Alex Samorukov
2580ea1583 Fix url validaton failures (#2783)
While analyzing failure of the report schema validation i found URL looks like that: `https://ubuntu.com/security/notices/USN-5051-4 (regression only in trusty/esm)`. This causing gitlab to mark report as invalid. Patch provided just using first word of the url word.
2022-08-30 15:57:40 +03:00
DmitriyLewen
2473b2c881 fix(image): add logic to detect empty layers (#2790)
* add logic to detect empty layers

* add test for createdBy from buildkit
2022-08-30 15:56:14 +03:00
afdesk
9d018d44b9 feat(rust): add dependency graph from Rust binaries (#2771) 2022-08-30 15:46:38 +03:00
Teppei Fukuda
db67f16ac6 fix: handle empty OS family (#2768) 2022-08-29 08:53:13 +03:00
Jose Donizetti
77616bebae fix: fix k8s summary report (#2777)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-08-25 10:43:39 +03:00
DmitriyLewen
fcccfced23 fix: don't skip packages that don't contain vulns, when using --list-all-pkgs flag (#2767) 2022-08-25 10:40:03 +03:00
Jose Donizetti
8bc215ccf6 chore: bump trivy-kubernetes (#2770)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-08-25 09:37:47 +03:00
Ankush K
d8d8e62793 fix(secret): Consider secrets in rpc calls (#2753) 2022-08-25 09:36:51 +03:00
DmitriyLewen
b0e89d4c57 fix(java): check depManagement from upper pom's (#2747) 2022-08-24 11:22:22 +03:00
afdesk
da6f1b6f25 fix(php): skip composer.lock inside vendor folder (#2718)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-08-23 13:17:09 +03:00
Jose Donizetti
2f2952c658 fix: fix k8s rbac filter (#2765) 2022-08-23 11:56:06 +03:00
afdesk
8bc56bf2fc feat(misconf): skipping misconfigurations by AVD ID (#2743) 2022-08-22 11:06:04 +03:00
Alexander Lauster
9c1ce5afe8 chore(deps): Upgrade Alpine to 3.16.2 to fix zlib issue (#2741) 2022-08-18 17:05:39 +03:00
Herby Gillot
3cd10b2358 docs: add MacPorts install instructions (#2727) 2022-08-17 13:41:55 +03:00
will Farrell
f369bd3e3d docs: typo (#2730) 2022-08-17 10:58:44 +01:00
Liam Galvin
fefe7c4a7b fix: Correctly handle recoverable AWS scanning errors (#2726) 2022-08-16 18:00:44 +03:00
Liam Galvin
9c92e3d185 docs: Remove reference to SecurityAudit policy for AWS scanning (#2721) 2022-08-16 16:31:49 +03:00
Liam Galvin
d343d13ac6 fix: upgrade defsec to v0.71.7 for elb scan panic (#2720) 2022-08-16 15:00:18 +03:00
DmitriyLewen
917f388852 fix(flag): add error when there are no supported security checks (#2713) 2022-08-16 09:57:46 +03:00
Teppei Fukuda
aef02aa174 fix(vuln): continue scanning when no vuln found in the first application (#2712) 2022-08-16 08:41:01 +03:00
Teppei Fukuda
ed1fa89117 revert: add new classes for vulnerabilities (#2701) 2022-08-15 21:40:29 +03:00
DmitriyLewen
a5d4f7fbd9 feat(secret): detect secrets removed or overwritten in upper layer (#2611)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-08-15 20:40:54 +03:00
Moulick Aggarwal
ddffb1b451 fix(cli): secret scanning perf link fix (#2607) 2022-08-15 16:15:22 +03:00
dependabot[bot]
bc85441f7d chore(deps): bump github.com/spf13/viper from 1.8.1 to 1.12.0 (#2650) 2022-08-15 12:33:41 +03:00
Liam Galvin
b259b25ce4 feat: Add AWS Cloud scanning (#2493)
* feat: Added AWS Cloud scanning

Co-authored-by: Owen Rumney <owen.rumney@aquasec.com>
2022-08-11 14:59:32 +01:00
saso
f8edda8479 docs: specify the type when verifying an attestation (#2697) 2022-08-11 13:17:44 +03:00
saso
687941390e docs(sbom): improve SBOM docs by adding a description for scanning SBOM attestation (#2690) 2022-08-10 15:47:40 +03:00
Ankush K
babfb17465 fix(rpc): scanResponse rpc conversion for custom resources (#2692) 2022-08-10 13:45:32 +03:00
Tom Fay
517d2e0109 feat(rust): Add support for cargo-auditable (#2675) 2022-08-10 13:43:23 +03:00
Owen Rumney
01123854b4 feat: Support passing value overrides for configuration checks (#2679) 2022-08-08 18:22:58 +03:00
saso
317a026616 feat(sbom): add support for scanning a sbom attestation (#2652)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-08-08 16:27:05 +03:00
DmitriyLewen
390c256c38 chore(image): skip symlinks and hardlinks from tar scan (#2634) 2022-08-08 15:57:08 +03:00
Matteo Vitali
63c33bfa43 fix(report): Update junit.tpl (#2677)
Add explicit name="trivy" in the testsuite element
2022-08-08 15:47:18 +03:00
Masahiro331
de365c8e92 fix(cyclonedx): add nil check to metadata.component (#2673) 2022-08-08 15:15:38 +03:00
Lior Vaisman Argon
50db7da947 docs(secret): fix missing and broken links (#2674) 2022-08-08 15:14:55 +03:00
Teppei Fukuda
e848e6d009 refactor(cyclonedx): implement json.Unmarshaler (#2662)
* refactor(cyclonedx): implement json.Unmarshaler

* fix: use pointer
2022-08-04 14:15:33 +03:00
dependabot[bot]
df0b5e40db chore(deps): bump github.com/aquasecurity/table from 1.6.0 to 1.7.2 (#2643)
Bumps [github.com/aquasecurity/table](https://github.com/aquasecurity/table) from 1.6.0 to 1.7.2.
- [Release notes](https://github.com/aquasecurity/table/releases)
- [Commits](https://github.com/aquasecurity/table/compare/v1.6.0...v1.7.2)

---
updated-dependencies:
- dependency-name: github.com/aquasecurity/table
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-08-04 11:44:55 +03:00
dependabot[bot]
006b8a5c29 chore(deps): bump github.com/Azure/go-autorest/autorest (#2642) 2022-08-04 11:43:18 +03:00
Magesh Dhasayyan
8d10de8b4f feat(kubernetes): add option to specify kubeconfig file path (#2576) 2022-08-04 10:18:18 +03:00
Axit Patel
169c55c688 docs: follow Debian's "instructions to connect to a third-party repository" (#2511) 2022-08-04 10:11:38 +03:00
dependabot[bot]
9b21831440 chore(deps): bump github.com/google/licenseclassifier/v2 (#2644) 2022-08-03 15:04:13 +03:00
dependabot[bot]
94db37e541 chore(deps): bump github.com/samber/lo from 1.24.0 to 1.27.0 (#2645) 2022-08-03 14:58:40 +03:00
dependabot[bot]
d9838053df chore(deps): bump github.com/Azure/go-autorest/autorest/adal (#2647) 2022-08-03 14:43:51 +03:00
dependabot[bot]
d8a9572930 chore(deps): bump github.com/cheggaaa/pb/v3 from 3.0.8 to 3.1.0 (#2646) 2022-08-03 10:46:37 +03:00
dependabot[bot]
3ab3050992 chore(deps): bump sigstore/cosign-installer from 2.4.1 to 2.5.0 (#2641) 2022-08-03 10:46:00 +03:00
dependabot[bot]
75984f347b chore(deps): bump actions/cache from 3.0.4 to 3.0.5 (#2640) 2022-08-03 10:44:59 +03:00
dependabot[bot]
525c2530d5 chore(deps): bump alpine from 3.16.0 to 3.16.1 (#2639) 2022-08-03 10:44:27 +03:00
dependabot[bot]
5e327e41a6 chore(deps): bump golang from 1.18.3 to 1.18.4 (#2638) 2022-08-03 10:44:05 +03:00
dependabot[bot]
469d771a59 chore(deps): bump github.com/aws/aws-sdk-go from 1.44.48 to 1.44.66 (#2648) 2022-08-03 10:43:40 +03:00
dependabot[bot]
6bc8c87bc1 chore(deps): bump github.com/open-policy-agent/opa from 0.42.0 to 0.43.0 (#2649) 2022-08-03 10:43:17 +03:00
dependabot[bot]
6ab832d099 chore(deps): bump google.golang.org/protobuf from 1.28.0 to 1.28.1 (#2651) 2022-08-03 10:40:57 +03:00
MaineK00n
3a10497a6f feat(alma): set AlmaLinux 9 EOL (#2653) 2022-08-03 10:40:07 +03:00
Liam Galvin
55825d760b fix(misconf): Allow quotes in Dockerfile WORKDIR when detecting relative dirs (#2636) 2022-08-01 15:38:04 +03:00
DmitriyLewen
6bb0e4b036 test(misconf): add tests for misconf handler for dockerfiles (#2621) 2022-08-01 14:56:53 +03:00
DmitriyLewen
44d53bed48 feat(oracle): set Oracle Linux 9 EOL (#2635) 2022-08-01 10:36:30 +03:00
Teppei Fukuda
f396c677a2 BREAKING: add new classes for vulnerabilities (#2541) 2022-07-31 10:47:08 +03:00
DmitriyLewen
3cd88abec5 fix(secret): add newline escaping for asymmetric private key (#2532) 2022-07-31 10:18:16 +03:00
Ben Bodenmiller
ea91fb91b0 docs: improve formatting (#2572) 2022-07-31 10:17:42 +03:00
cebidhem
d0ca610a96 feat(helm): allows users to define an existing secret for tokens (#2587)
Signed-off-by: cebidhem <cebidhem@pm.me>
2022-07-31 09:56:14 +03:00
DmitriyLewen
d0ba59a44d docs(mariner): use tdnf in fs usage example (#2616) 2022-07-31 09:50:27 +03:00
saso
d7742b6c17 docs: remove unnecessary double quotation marks (#2609) 2022-07-31 09:45:00 +03:00
Liam Galvin
27027cf40d fix: Fix --file-patterns flag (#2625) 2022-07-29 21:54:57 +03:00
saso
c2a7ad5c01 feat(report): add support for Cosign vulnerability attestation (#2567) 2022-07-27 17:39:35 +03:00
DmitriyLewen
dfb86f41f8 docs(mariner): use v2.0 in examples (#2602) 2022-07-27 14:42:09 +03:00
Nate
946ce1672d feat(report): add secrets template for codequality report (#2461) 2022-07-27 10:55:32 +03:00
Teppei Fukuda
f9c17bd2d8 fix: remove the first arg when running as a plugin (#2595) 2022-07-26 21:54:43 +03:00
Jose Donizetti
cccfade374 fix: k8s controlplaner scanning (#2593)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-07-26 16:35:34 +03:00
thiago-gitlab
5a65548662 fix(vuln): GitLab report template (#2578)
* fix(vuln): GitLab report template

- Upgrade to schema 14.0.6 (https://gitlab.com/gitlab-org/security-products/security-report-schemas/-/blob/v14.0.6/dist/container-scanning-report-format.json).
- Drop unsupported `confidence` property. Currently optional and will be removed by GitLab in schema 15-0-0.

* docs(vuln): remove note about broken GitLab integration
2022-07-26 15:51:20 +03:00
afdesk
fa8a8ba7dc fix(server): use a new db worker for hot updates (#2581)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-07-25 17:26:08 +03:00
DmitriyLewen
769ed554b0 docs: add trivy with download-db-only flag to Air-Gapped Environment (#2583) 2022-07-25 16:50:26 +03:00
DmitriyLewen
5f9a963ef6 docs: split commands to download db for different versions of oras (#2582) 2022-07-25 15:19:04 +03:00
Alexander Lauster
d93a997800 feat(report): export exitcode for license checks (#2564)
Also export the exit code for license checks 
fixes #2562
2022-07-25 14:26:12 +03:00
afdesk
f9be138aab fix: cli can use lowercase for severities (#2565) 2022-07-25 14:25:16 +03:00
Teppei Fukuda
c7f0bc92ae fix: allow subcommands with TRIVY_RUN_AS_PLUGIN (#2577) 2022-07-25 11:27:47 +03:00
MaineK00n
c2f3731873 fix: add missing types in TypeOSes and TypeLanguages in analyzer (#2569) 2022-07-24 17:24:13 +03:00
saso
7b4f2dc72f fix: enable some features of the wasm runtime (#2575) 2022-07-24 08:31:54 +03:00
Denys Mazhar
84677903a6 fix(k8s): no error logged if trivy can't get docker image in kubernetes mode (#2521)
* Enable k8s logging and increase log level of the image scan errors

* Rework errors reporting

* Rework GetErrors method into printErrors

Print errors during report writing

* Increase log level for scan errors logging
2022-07-21 15:34:47 -03:00
saso
e1e02d785f docs(sbom): improve sbom attestation documentation (#2566) 2022-07-21 17:54:21 +03:00
afdesk
80c7b91637 fix(report): show the summary without results (#2548) 2022-07-21 14:41:51 +03:00
DmitriyLewen
07c3ac4de1 fix(cli): replace '-' to '_' for env vars (#2561) 2022-07-21 13:41:56 +03:00
Teppei Fukuda
9da45f7bbd chore: remove a test repository (#2551) 2022-07-20 14:25:12 +03:00
Teppei Fukuda
6138f57bf9 fix(license): lazy loading of classifiers (#2547) 2022-07-20 13:43:53 +03:00
DmitriyLewen
2cbe8dfebd fix: CVE-2022-1996 in Trivy (#2499)
* replace k8s.io/client-go

* update trivy-kubernetes
2022-07-20 13:43:37 +03:00
saso
e393ce1477 docs(sbom): add sbom attestation (#2527)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-07-19 11:41:44 +03:00
MaineK00n
ae5a2d06b4 feat(rocky): set Rocky Linux 9 EOL (#2543) 2022-07-19 09:15:09 +03:00
saso
f8dd616545 docs: add attributes to the video tag to autoplay demo videos (#2538) 2022-07-18 12:39:44 +03:00
Owen Rumney
63cbbd071a fix: yaml files with non-string chart name (#2534)
Signed-off-by: Owen Rumney <owen.rumney@aquasec.com>
2022-07-18 11:04:19 +03:00
afdesk
6d015d32aa fix: skip dirs (#2530) 2022-07-18 08:32:46 +03:00
Shubham Palriwala
30c9f90bf8 feat(repo): add support for branch, commit, & tag (#2494)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-07-17 13:54:28 +03:00
afdesk
783e7cfe0c fix: remove auto configure environment variables via viper (#2526) 2022-07-16 20:32:20 +03:00
DmitriyLewen
45dae7c2cf fix: separating multiple licenses from one line in dpkg copyright files (#2508)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-07-15 14:24:25 +03:00
afdesk
469028dca5 fix: change a capital letter for plugin uninstall subcommand (#2519) 2022-07-15 07:39:15 +03:00
Jose Donizetti
ae9ba340af fix: k8s hide empty report when scanning resource (#2517)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-07-14 10:30:01 -03:00
Teppei Fukuda
783cf6fe74 refactor: fix comments (#2516) 2022-07-14 16:11:20 +03:00
Teppei Fukuda
603825a4f9 fix: scan vendor dir (#2515) 2022-07-14 15:35:58 +03:00
Owen Rumney
a3a66df007 feat: Add support for license scanning (#2418)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
2022-07-13 22:36:41 +03:00
Teppei Fukuda
bb06f6f8cf chore: add owners for secret scanning (#2485)
Signed-off-by: knqyf263 <knqyf263@gmail.com>
2022-07-13 14:36:05 +03:00
DmitriyLewen
6b501219de fix: remove dependency-tree flag for image subcommand (#2492) 2022-07-13 14:08:54 +03:00
Jose Donizetti
57192bd5ae fix(k8s): add shorthand for k8s namespace flag (#2495)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-07-13 14:07:25 +03:00
DmitriyLewen
9f8685c14e docs: add information about using multiple servers to troubleshooting (#2498) 2022-07-13 14:05:48 +03:00
DmitriyLewen
ed322ac666 ci: add pushing canary build images to registries (#2428) 2022-07-11 15:49:55 +03:00
dependabot[bot]
8d4dba02c9 chore(deps): bump github.com/open-policy-agent/opa from 0.41.0 to 0.42.0 (#2479)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
Co-authored-by: DmitriyLewen <91113035+DmitriyLewen@users.noreply.github.com>
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-07-11 13:37:24 +03:00
afdesk
a6685b1bad feat(dotnet): add support for .Net core .deps.json files (#2487)
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-07-11 13:32:38 +03:00
DmitriyLewen
56265a9b98 feat(amazon): add support for 2022 version (#2429)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-07-11 11:16:06 +03:00
Prakarsh
c6f68e361d Type correction bitnami chart (#2415) 2022-07-10 20:45:53 +03:00
dependabot[bot]
6ae4b360fd chore(deps): bump github.com/owenrumney/go-sarif/v2 from 2.1.1 to 2.1.2 (#2449) 2022-07-10 20:00:28 +03:00
dependabot[bot]
6def863470 chore(deps): bump github.com/aquasecurity/table from 1.5.1 to 1.6.0 (#2446) 2022-07-10 20:00:00 +03:00
Teppei Fukuda
e98bde3396 docs: add config file and update CLI references (#2489) 2022-07-10 19:41:42 +03:00
Teppei Fukuda
736e3f11f7 feat: add support for flag groups (#2488) 2022-07-10 15:03:57 +03:00
Teppei Fukuda
5b7e0a858d refactor: move from urfave/cli to spf13/cobra (#2458)
Co-authored-by: afdesk <work@afdesk.com>
Co-authored-by: DmitriyLewen <91113035+DmitriyLewen@users.noreply.github.com>
2022-07-09 19:40:31 +03:00
Liam Galvin
7699153c66 fix: Fix secrets output not containing file/lines (#2467) 2022-07-08 16:17:21 +03:00
afdesk
a70fd758ec fix: clear output with modules (#2478) 2022-07-07 21:13:52 +03:00
dependabot[bot]
e99bf302b6 chore(deps): bump github.com/mailru/easyjson from 0.7.6 to 0.7.7 (#2448) 2022-07-07 11:18:26 +03:00
DmitriyLewen
64854fc850 docs(cbl): distroless 1.0 supported (#2473) 2022-07-07 09:06:01 +03:00
Liam Galvin
e77cfd6487 fix: Fix example dockerfile rego policy (#2460) 2022-07-05 17:46:27 +03:00
DmitriyLewen
e778ac3e21 fix(config): add helm to list of config analyzers (#2457) 2022-07-05 14:42:57 +03:00
Jose Donizetti
aedcf5b58c feat: k8s resouces scan (#2395)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-07-04 14:26:21 -03:00
Masahiro331
5b821d3b13 feat(sbom): add cyclonedx sbom scan (#2203)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-07-03 20:03:21 +03:00
Crypt Keeper
f0720f3ce5 chore(deps): bump wazero to latest main (#2436)
also fixes a redundant close

Signed-off-by: Adrian Cole <adrian@tetrate.io>
2022-07-03 18:52:37 +03:00
dependabot[bot]
581fe1ed55 chore(deps): bump github.com/stretchr/testify from 1.7.3 to 1.8.0 (#2444) 2022-07-03 12:26:02 +03:00
dependabot[bot]
7a4e0687fc chore(deps): bump github.com/alicebob/miniredis/v2 from 2.21.0 to 2.22.0 (#2445) 2022-07-03 11:45:28 +03:00
dependabot[bot]
422b0fc0f1 chore(deps): bump sigstore/cosign-installer from 2.3.0 to 2.4.1 (#2442) 2022-07-03 10:27:03 +03:00
dependabot[bot]
260756d5b9 chore(deps): bump actions/setup-python from 3 to 4 (#2441) 2022-07-03 10:26:42 +03:00
dependabot[bot]
9b22035967 chore(deps): bump github.com/Azure/azure-sdk-for-go (#2450) 2022-07-03 10:26:20 +03:00
afdesk
c96090ca2c docs: remove links to removed content (#2431) 2022-07-03 10:17:21 +03:00
DmitriyLewen
14be70aa51 ci: added rpm build for rhel 9 (#2437) 2022-07-03 10:15:19 +03:00
DmitriyLewen
71980feca1 fix(secret): remove space from asymmetric private key (#2434) 2022-07-03 10:14:36 +03:00
dependabot[bot]
d94df3d9be chore(deps): bump actions/cache from 3.0.2 to 3.0.4 (#2440) 2022-07-01 18:42:31 +03:00
dependabot[bot]
d213223044 chore(deps): bump helm/kind-action from 1.2.0 to 1.3.0 (#2439) 2022-07-01 18:42:08 +03:00
dependabot[bot]
8e0c537392 chore(deps): bump golang from 1.18.2 to 1.18.3 (#2438) 2022-07-01 18:41:43 +03:00
dependabot[bot]
005d0243df chore(deps): bump github.com/aws/aws-sdk-go from 1.44.25 to 1.44.46 (#2447) 2022-07-01 18:41:19 +03:00
DmitriyLewen
7de7a1f8f3 test(integration): fix golden files for debian 9 (#2435) 2022-07-01 11:21:04 +03:00
Jonathan Pulsifer
f64534651a fix(cli): fix version string in docs link when secret scanning is enabled (#2422)
Signed-off-by: Jonathan Pulsifer <jonathan@pulsifer.ca>
2022-06-30 16:58:40 +03:00
Teppei Fukuda
164094968f refactor: move CycloneDX marshaling (#2420) 2022-06-30 10:37:46 +03:00
mycodeself
6be6f74d5c docs(nodejs): add docs about pnpm support (#2423) 2022-06-30 10:33:29 +03:00
Jose Donizetti
ac2fdc87ae docs: improve k8s usage documentation (#2425)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-06-30 10:28:52 +03:00
Liam Galvin
fe2ae8edc8 feat: Make secrets scanning output consistant (#2410) 2022-06-29 17:23:39 +03:00
DmitriyLewen
0ed39fc805 ci: create canary build after main branch changes (#1638)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-29 16:58:11 +03:00
afdesk
7111301fa4 fix(misconf): skip broken scans (#2396) 2022-06-29 13:35:38 +03:00
mycodeself
c36a373def feat(nodejs): add pnpm support (#2414)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-29 13:31:04 +03:00
Liam Galvin
e060026ec8 fix: Fix false positive for use of COS images (#2413)
Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-06-29 11:03:47 +03:00
Teppei Fukuda
8d03e5af9f eliminate nerdctl dependency (#2412) 2022-06-28 21:28:59 +03:00
Guilherme Macedo
938c0d1866 Add EOL date for SUSE SLES 15.3, 15.4 and OpenSUSE 15.4 (#2403)
Signed-off-by: Guilherme Macedo <guilherme.macedo@suse.com>
2022-06-28 06:26:44 +03:00
afdesk
6e8b50ede9 fix(go): no cast to lowercase go package names (#2401) 2022-06-27 17:31:58 +03:00
Teppei Fukuda
4a197efcb2 BREAKING(sbom): change 'trivy sbom' to scan SBOM (#2408) 2022-06-27 16:42:41 +03:00
afdesk
e2c3bc4124 fix(server): hot update the db from custom repository (#2406) 2022-06-27 13:45:48 +03:00
DmitriyLewen
57ed577459 feat: added license parser for dpkg (#2381)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-27 13:04:53 +03:00
Erik Godding Boye
4656850c04 chore(helm): bump appVersion to latest release (#2397)
Signed-off-by: Erik Godding Boye <egboye@gmail.com>
2022-06-27 12:18:54 +03:00
Liam Galvin
c537c91d75 fix(misconf): Update defsec (v0.68.5) to fix docker rego duplicate key (#2400)
Resolves #2394

Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-06-26 09:37:57 +03:00
Jose Donizetti
ee58d53fc8 feat: extract stripe publishable and secret keys (#2392) 2022-06-23 17:01:59 +03:00
chenk
776ef1a31e feat: rbac support k8s sub-command (#2339) 2022-06-23 13:49:14 +03:00
Kyriakos Georgiou
6ed789e88b feat(ruby): drop platform strings from dependency versions bundled with bundler v2 (#2390)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-23 10:49:05 +03:00
Anais Urlichs
bc27198d3e docs: Updating README with new CLI command (#2359) 2022-06-22 14:46:48 +03:00
Liam Galvin
4c35084f27 fix(misconf): Update defsec to v0.68.4 to resolve CF detection bug (#2383) 2022-06-22 14:02:40 +03:00
Itay Shakury
394c948130 chore: add integration label and merge security label (#2316)
* chore: add integration label and merge security label

* use the kind/security label for vulnerabilities

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-22 12:11:37 +03:00
afdesk
6b515bc736 chore: skip Visual Studio Code project folder (#2379) 2022-06-22 10:16:45 +03:00
afdesk
25416ae6d8 fix(helm): handle charts with templated names (#2374) 2022-06-21 20:34:17 +03:00
chenk
85cca55930 docs: redirect operator docs to trivy-operator repo (#2372) 2022-06-21 18:00:28 +03:00
Teppei Fukuda
b944ac6286 Merge pull request #2356 from aquasecurity/liamg-merge-fanal-magic-attempt-2
refactor: merge fanal into trivy
2022-06-21 17:15:10 +03:00
buda
9809a07bf1 fix(secret): use secret result when determining Failed status (#2370) 2022-06-21 17:01:20 +03:00
knqyf263
e9831cec2f try removing libdb-dev 2022-06-21 16:18:55 +03:00
knqyf263
04c01f6297 run integration tests in fanal 2022-06-21 16:18:08 +03:00
knqyf263
86e19bb677 use same testing images in fanal 2022-06-21 16:18:06 +03:00
Erik Godding Boye
484ddd897d feat(helm): add support for trivy dbRepository (#2345)
Signed-off-by: Erik Godding Boye <egboye@gmail.com>
2022-06-21 09:02:00 +03:00
Liam Galvin
9e7404e76d fix: Fix failing test due to deref lint issue 2022-06-20 13:13:23 +01:00
afdesk
6ce9404c16 fix(report): add required fields to the SARIF template (#2341)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-06-20 13:31:21 +03:00
Liam Galvin
85c6529cb5 test: Fix broken test 2022-06-20 10:42:23 +01:00
Liam Galvin
6c983cbf45 fix: Fix makefile when no previous named ref is visible in a shallow clone 2022-06-20 10:31:13 +01:00
Liam Galvin
1ac4fd8a61 chore: Fix linting issues in fanal 2022-06-20 10:11:13 +01:00
Liam Galvin
094db23a03 refactor: Fix fanal import paths and remove dotfiles 2022-06-20 09:43:33 +01:00
Liam Galvin
b6f615b535 refactor: Merge fanal into Trivy 2022-06-20 09:40:05 +01:00
Josh Soref
d6d0a60d16 chore: fix spelling errors (#2352) 2022-06-20 09:56:13 +03:00
Ben Harvey
6f1035269d Omit Remediation if PrimaryURL is empty (#2006) 2022-06-19 15:16:08 +03:00
Schlump
396e404eeb docs(repo): Link to installation documentation in readme shows 404 (#2348) 2022-06-19 15:11:31 +03:00
MaineK00n
79e941df0d feat(alma): support for scanning of modular packages for AlmaLinux (#2347) 2022-06-17 10:15:27 +03:00
AndreyLevchenko
cb76acbd9f fix(lang): fix dependency graph in client server mode (#2336) 2022-06-16 13:05:55 +03:00
maltemorgenstern
3d2fc78852 feat: allow expiration date for .trivyignore entries (#2332)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-06-16 13:04:19 +03:00
AndreyLevchenko
3e3c119555 feat(lang): add dependency origin graph (#1970)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-16 10:34:26 +03:00
j-k
685a92e09a docs: update nix installation info (#2331) 2022-06-15 20:11:09 +03:00
chenk
1e0b03d47f feat: add rbac scanning support (#2328) 2022-06-15 20:01:22 +03:00
chenk
6765c77c38 Merge pull request fanal#566 from chen-keinan/chore/bump-fanal-version
chore: bump defsec version v0.68.1
2022-06-15 18:05:50 +03:00
chenk
644ada1279 chore: bump defsec version v0.68.1
Signed-off-by: chenk <hen.keinan@gmail.com>
2022-06-15 17:48:55 +03:00
Teppei Fukuda
c9f9a9c917 refactor: move WordPress module to another repository (#2329)
* refactor: remove go.mod/sum from example

* move a wordpress example out
2022-06-15 16:56:51 +03:00
Rafael Sene
bcc231d3ba ci: add support for ppc64le (#2281)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-15 16:51:03 +03:00
Teppei Fukuda
7cecade3a1 feat: add support for WASM modules (#2195) 2022-06-15 15:23:00 +03:00
DmitriyLewen
a9ddb39d5f fix(secrets): added allow rule for examples (fanal#565)
* fix(secrets): added allow rule for examples

* test(secrets): added test for skip example file
2022-06-15 14:55:21 +03:00
Teppei Fukuda
a02c06bafd feat(secret): show recommendation for slow scanning (#2051)
Co-authored-by: afdesk <work@afdesk.com>
2022-06-15 12:39:32 +03:00
mycodeself
e85881231f fix(flag): remove --clear-cache flag client mode (#2301) 2022-06-15 11:48:24 +03:00
chenk
8d13f3da95 feat: support rbac scanner and type (fanal#563)
Signed-off-by: chenk <hen.keinan@gmail.com>
2022-06-15 11:39:17 +03:00
DmitriyLewen
276daae672 fix(java): added check for looping for variable evaluation in pom file (#2322) 2022-06-15 11:23:52 +03:00
Jose Donizetti
546e7bd6b1 BREAKING(k8s): change CLI API (#2186) 2022-06-15 10:41:18 +03:00
MaineK00n
b69c4de757 feat(alpine): add Alpine Linux 3.16 (#2319) 2022-06-14 20:00:26 +03:00
Jose Donizetti
33b8521aee docs: bump trivy-operator to v0.0.7 (#2320) 2022-06-14 19:59:48 +03:00
DmitriyLewen
c0ad4f705e chore(deps): updated go-dep-parser (fanal#556)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-14 15:34:34 +03:00
dependabot[bot]
a6f4ab3735 chore(deps): bump github.com/Azure/go-autorest/autorest/adal (fanal#543) 2022-06-14 15:13:19 +03:00
Teppei Fukuda
8ae754a7d2 Add custom resources in fs scanning and add deregister analyzers (fanal#564)
* Add deregister analyzers

* feat(fs): add CustomResources
2022-06-14 14:48:54 +03:00
afdesk
313ade3386 ci: add go mod tidy check (#2314) 2022-06-14 10:54:45 +03:00
afdesk
b331e771aa chore: run go mod tidy (#2313) 2022-06-14 08:19:38 +03:00
Jose Donizetti
bfe5c6f14f fix: do not exit if one resource is not found (#2311)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-06-13 17:13:19 +03:00
Patrick Decat
363a3e40ea feat(cli): use stderr for all log messages (resolve #381) (#2289) 2022-06-13 13:47:16 +03:00
afdesk
b213956cea test: replace deprecated subcommand client in integration tests (#2308) 2022-06-12 20:38:55 +03:00
Teppei Fukuda
efbc968ca8 feat: add support for containerd (#2305)
* chore(deps): bump fanal

* replace containerd

* fix: update signatures

* docs: containerd
2022-06-12 17:50:23 +03:00
Owen Rumney
9a601d49ef fix(kubernetes): Support floats in manifest yaml (#2297)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-12 17:01:50 +03:00
chenk
a589353bb3 docs(kubernetes): dead links (#2307)
Signed-off-by: chenk <hen.keinan@gmail.com>
2022-06-12 16:40:40 +03:00
Itay Shakury
f38f8d66fb chore: add license label (#2304) 2022-06-12 13:14:53 +03:00
geyingqi
decad9b429 Support get local image by containerd (fanal#348)
Co-authored-by: Andrey Levchenko <levchenko.andrey@gmail.com>
Co-authored-by: afdesk <work@afdesk.com>
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-12 13:04:12 +03:00
Owen Rumney
9c531904ad chore(deps): update defsec (fanal#558)
* chore(deps): update defsec
* fix: update tests with changes
* fix test
* fix: lint fixes

Signed-off-by: Owen Rumney <owen.rumney@aquasec.com>
2022-06-10 08:48:19 +01:00
DmitriyLewen
2b1de93249 feat(mariner): added support for CBL-Mariner Distroless v2.0 (#2293) 2022-06-09 13:45:01 +03:00
JBOClara
5423196f4c feat(helm): add pod annotations (#2272)
Co-authored-by: azman0101 <azman0101@gmail.com>
2022-06-09 11:13:26 +03:00
DmitriyLewen
6fb477097c refactor: do not import defsec in fanal types package (#2292) 2022-06-09 11:11:44 +03:00
Rafael Sene
df669592ed Bump go-rpmdb (fanal#553)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-09 10:35:23 +03:00
DmitriyLewen
74fcd3f881 feat(mariner): added support for CBL-Mariner Distroless v2.0 (fanal#552)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-06-09 10:18:27 +03:00
DmitriyLewen
d523424fda feat(npm): calculate indirect libraries (fanal#557) 2022-06-09 10:05:07 +03:00
afdesk
42267f94c5 refactor: remove unused field imageName from integration test (fanal#555) 2022-06-08 15:24:31 +03:00
Liam Galvin
4d382a0302 feat(report): Add misconfiguration support to ASFF report template (#2285) 2022-06-08 14:28:18 +03:00
dependabot[bot]
1343996fec chore(deps): bump github.com/urfave/cli/v2 from 2.6.0 to 2.8.1 (fanal#544) 2022-06-08 14:25:34 +03:00
dependabot[bot]
8a877c5b29 chore(deps): bump github.com/Azure/azure-sdk-for-go (fanal#545) 2022-06-08 14:25:15 +03:00
dependabot[bot]
59f1a04ba5 chore(deps): bump github.com/samber/lo from 1.19.0 to 1.21.0 (fanal#546) 2022-06-08 14:24:48 +03:00
afdesk
d5a62c9a5c test: use images in GHCR for integration tests (fanal#554) 2022-06-08 14:23:22 +03:00
Teppei Fukuda
f1c6af3121 test: use images in GHCR (#2275)
Co-authored-by: AMF <work@afdesk.com>
2022-06-07 13:50:32 +03:00
mycodeself
0977dfcde8 feat(helm): support pod annotations (#2265) 2022-06-07 11:42:58 +03:00
Owen Rumney
6b2cd7e8da feat(misconf): Helm chart scanning (#2269)
Signed-off-by: Owen Rumney <owen.rumney@aquasec.com>
2022-06-07 11:38:43 +03:00
Teppei Fukuda
96ce2db949 refactor: do not import defsec in types package (fanal#537)
* refactor: do not import defsec in types package

* test(external): fix imports
2022-06-07 11:26:32 +03:00
Owen Rumney
6c25b8326e fix: support for helm chart *.tar.gz (fanal#551)
* fix: support for helm chart *.tar.gz

- add test to validate

Signed-off-by: Owen Rumney <owen.rumney@aquasec.com>

* fix: adding missing test tar

Signed-off-by: Owen Rumney <owen.rumney@aquasec.com>
2022-06-06 12:40:23 +01:00
Liam Galvin
3912768470 docs: Update custom rego policy docs to reflect latest defsec/fanal changes (#2267)
Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-06-06 12:51:23 +03:00
mycodeself
a17c3eec2a fix: mask redis credentials when logging (#2264) 2022-06-06 11:07:08 +03:00
Jose Donizetti
d8b59efea9 refactor: extract commands Runner interface (#2147) 2022-06-06 11:04:24 +03:00
dependabot[bot]
60a81fcb95 chore(deps): bump alpine from 3.15.4 to 3.16.0 (#2234) 2022-06-06 08:09:24 +03:00
dependabot[bot]
c73650d967 chore(deps): bump github.com/CycloneDX/cyclonedx-go from 0.5.2 to 0.6.0 (#2245) 2022-06-06 08:08:49 +03:00
chenk
6cfdffda18 docs: update operator release (#2263)
Signed-off-by: chenk <hen.keinan@gmail.com>
2022-06-06 07:39:20 +03:00
dependabot[bot]
510ce1a782 chore(deps): bump github.com/urfave/cli/v2 from 2.6.0 to 2.8.1 (#2243) 2022-06-02 16:48:59 +03:00
DmitriyLewen
92c0452b74 feat(redhat): added architecture check (#2172)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-06-02 15:35:42 +03:00
Anais Urlichs
1eb73f3fea docs: updating links in the docs to work again (#2256) 2022-06-02 15:22:51 +03:00
Jose Donizetti
270dc7346f docs: fix readme (#2251) 2022-06-02 12:59:35 +03:00
DmitriyLewen
a6ff0d12bb fix: fixed incorrect CycloneDX output format (#2255) 2022-06-02 09:55:49 +03:00
Masahiro331
43997f33c8 feat(types): add Ref to package (fanal#540) 2022-06-02 07:33:45 +03:00
dependabot[bot]
64c91249ef chore(deps): bump golangci/golangci-lint-action from 3.1.0 to 3.2.0 (fanal#541) 2022-06-01 19:35:08 +03:00
dependabot[bot]
7baccf2088 chore(deps): bump github.com/alicebob/miniredis/v2 from 2.18.0 to 2.21.0 (fanal#547) 2022-06-01 19:34:46 +03:00
dependabot[bot]
7dd7e2ba00 chore(deps): bump github.com/aws/aws-sdk-go from 1.44.5 to 1.44.25 (fanal#548) 2022-06-01 19:34:24 +03:00
dependabot[bot]
67d94774ba chore(deps): bump github.com/caarlos0/env/v6 from 6.9.1 to 6.9.3 (#2241) 2022-06-01 17:43:49 +03:00
dependabot[bot]
3e6dc37728 chore(deps): bump github.com/samber/lo from 1.19.0 to 1.21.0 (#2242) 2022-06-01 17:43:12 +03:00
dependabot[bot]
2dc5c9152e chore(deps): bump goreleaser/goreleaser-action from 2 to 3 (#2240) 2022-06-01 17:42:17 +03:00
dependabot[bot]
6daf62ebeb chore(deps): bump docker/setup-buildx-action from 1 to 2 (#2238) 2022-06-01 17:40:44 +03:00
dependabot[bot]
f9ee4943b1 chore(deps): bump docker/setup-qemu-action from 1 to 2 (#2236) 2022-06-01 17:40:14 +03:00
dependabot[bot]
c3e227b625 chore(deps): bump golang from 1.18.1 to 1.18.2 (#2235) 2022-06-01 17:39:23 +03:00
dependabot[bot]
ca390411f3 chore(deps): bump golangci/golangci-lint-action from 3.1.0 to 3.2.0 (#2237) 2022-06-01 17:38:34 +03:00
dependabot[bot]
c676361681 chore(deps): bump docker/login-action from 1 to 2 (#2239) 2022-06-01 17:38:03 +03:00
dependabot[bot]
126fe0abba chore(deps): bump github.com/hashicorp/go-getter from 1.5.11 to 1.6.1 (#2246) 2022-06-01 17:35:54 +03:00
AndreyLevchenko
f7d02538f6 refactor(deps): move dependencies to package (#2189) 2022-06-01 16:09:50 +03:00
Shira Cohen
f982167c0a fix(report): change github format version to required (#2229) 2022-06-01 15:39:40 +03:00
Itay Shakury
d3a73e4db7 docs: update readme (#2110)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-06-01 12:35:24 +03:00
DmitriyLewen
5d5b93ed69 docs: added information about choosing advisory database (#2212)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-06-01 11:26:46 +03:00
Jose Donizetti
36498501bf chore: update trivy-kubernetes (#2224)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-31 16:01:50 -03:00
Anais Urlichs
3c0e354743 docs: clarifying parts of the k8s docs and updating links (#2222) 2022-05-31 22:00:47 +03:00
Owen Rumney
f5e655e22a feat: adding helm support (fanal#534)
* feat: adding helm support
  -  adding tests for helm analyzer
  -  add test for non helm tarball
  -  adding in-memory filesystem for helm
  -  handle multiple charts at a time
  - check the size is smaller than arbitrary size of 200MB if a tarball
2022-05-31 18:50:57 +01:00
Jose Donizetti
af5882bc3e fix(k8s): timeout error logging (#2179)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-31 14:21:07 -03:00
DmitriyLewen
3d2921343b chore(deps): updated fanal after fix AsymmetricPrivateKeys (#2214) 2022-05-31 15:10:50 +03:00
AndreyLevchenko
df47d1be15 refactor(deps): move dependencies to package (fanal#535)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-31 15:04:23 +03:00
DmitriyLewen
ef8d77351f fix(secrets): AsymmetricPrivateKeys use only base64 characters (fanal#539) 2022-05-31 13:19:52 +03:00
Jose Donizetti
e18f38af3c feat(k8s): add --context flag (#2171)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-31 07:06:10 -03:00
Jose Donizetti
0e937b5367 fix(k8s): properly instantiate TableWriter (#2175)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-31 07:02:23 -03:00
DmitriyLewen
911c5e971a test: fixed integration tests after updating testcontainers to v0.13.0 (#2208) 2022-05-31 10:49:24 +03:00
Teppei Fukuda
6fd1887e64 chore: update labels (#2197)
* chore: update labels

* add targets
2022-05-30 15:55:05 +03:00
DmitriyLewen
4059e94aba fix(report): fixed panic if all misconf reports were removed in filter (#2188)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-30 15:16:42 +03:00
dependabot[bot]
24005c3ed0 chore(deps): bump github.com/testcontainers/testcontainers-go from 0.12.0 to 0.13.0 (fanal#502)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: DmitriyLewen <91113035+DmitriyLewen@users.noreply.github.com>
2022-05-30 09:34:01 +03:00
Jose Donizetti
84af32a7fe feat(k8s): scan secrets (#2178) 2022-05-29 16:40:51 +03:00
dependabot[bot]
193680b1ed chore(deps): bump github.com/urfave/cli/v2 from 2.4.0 to 2.6.0 (fanal#517) 2022-05-29 11:08:01 +03:00
DmitriyLewen
22db37e9da fix(secrets): added leading slash for file paths extracted from image (fanal#525)
* fix(secrets): added '/' for file paths derived from image

* refactor(secrets): used input.Dir to find image scan

* test(secrets): added path to image-config.yaml
2022-05-29 11:07:38 +03:00
AndreyLevchenko
4ab696eaa2 feat(report): GitHub Dependency Snapshots support (#1522)
Co-authored-by: Shira Cohen <97398476+ShiraCohen33@users.noreply.github.com>
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-26 21:34:15 +03:00
DmitriyLewen
b7ec642572 feat(db): added insecure skip tls verify to download trivy db (#2140)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-05-26 14:54:39 +03:00
DmitriyLewen
1e1ccbec52 fix(redhat): always use vulns with fixed version if there is one (#2165)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-26 11:24:31 +03:00
Vincent Palmer
4ceae2a052 chore(redhat): Add support for Red Hat UBI 9. (#2183)
* chore(redhat): Add support for Red Hat UBI 9.

* docs: add Red Hat UBI 9

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-26 10:08:30 +03:00
Jose Donizetti
4e7e842682 fix(k8s): update trivy-kubernetes (#2163)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-26 10:01:02 +03:00
Nate
089d34e866 fix misconfig start line for code quality tpl (#2181)
Co-authored-by: Nate Fear <natefear@users.noreply.github.com>
2022-05-26 09:41:29 +03:00
Lucas Bickel
bfb0f2a193 fix: update docker/distribution from 2.8.0 to 2.8.1 (#2176)
Signed-off-by: Lucas Bickel <lucas.bickel@adfinis.com>
2022-05-26 08:11:06 +03:00
thiago-gitlab
f19243127a docs(vuln): Include GitLab 15.0 integration (#2153) 2022-05-22 10:51:44 +03:00
Owen Rumney
4c6a866cce docs: fix the operator version (#2167) 2022-05-20 20:19:28 +03:00
Jose Donizetti
3ecc65d626 fix(k8s): summary report when when only vulns exit (#2146)
* fix(k8s): summary report when when only vulns exit

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>

* fix(k8s): return error for not supported report

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>

* test(k8s): add tests for report Failed()

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>

* refactor: improve error message

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-19 10:00:37 -03:00
Liam Galvin
6b95d3857f chore(deps): Update fanal to get defsec v0.58.2 (fixes false positives in ksv038) (#2156)
Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-05-19 15:33:33 +03:00
Liam Galvin
894fa25106 chore(deps): Update defsec to v0.58.2 (fixes false positives in ksv038) (fanal#533)
Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-05-19 14:47:54 +03:00
Liam Galvin
f6cfcaf193 perf(misconf): Improve performance when scanning very large files (#2152)
Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-05-18 18:57:32 +03:00
Liam Galvin
94f999ec07 perf(misconf): Update defsec to v0.58.1 to optimise result creation for very large files (fanal#532)
Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-05-18 13:41:01 +01:00
Liam Galvin
4b4a0c95ba docs(misconf): Update examples and docs to refer to builtin/defsec instead of appshield (#2150)
Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-05-18 14:49:15 +03:00
Liam Galvin
6d79fcacfc chore(deps): Update fanal (for less verbose code in misconf results) (#2151)
Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-05-18 13:47:53 +03:00
Liam Galvin
7a84438925 chore(deps): Update defsec to v0.58.0 (fanal#530)
Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-05-18 10:46:53 +01:00
DmitriyLewen
f8951f3847 docs: fixed installation instruction for rhel/centos (#2143) 2022-05-17 21:19:33 +03:00
Owen Rumney
afe3292843 fix: remove Highlighted from json output (#2131)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-16 19:04:09 +03:00
Jose Donizetti
3d23ad846c fix: remove trivy-kubernetes replace (#2132)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-16 18:56:22 +03:00
Owen Rumney
9822b40862 docs: Add Operator docs under Kubernetes section (#2111)
Co-authored-by: Itay Shakury <itay@itaysk.com>
2022-05-16 17:58:25 +03:00
Owen Rumney
898aaaa11c Merge pull request fanal#529 from aquasecurity/owenr-remove-highlighting-from-results
chore(deps): latest defsec for Highlight code ommission
2022-05-16 15:36:51 +01:00
Owen Rumney
c8682b55e2 fix: update defsec and fix tests accordingly 2022-05-16 15:29:06 +01:00
Jose Donizetti
bb6ff8511b fix(k8s): security-checks panic (#2127) 2022-05-16 17:24:33 +03:00
Owen Rumney
f776a91d18 chore(deps): update defsec 2022-05-16 15:09:13 +01:00
DmitriyLewen
3bed96f0cf ci: added k8s scope (#2130) 2022-05-16 16:17:38 +03:00
Liam Galvin
4a7544caea docs: Update misconfig output in examples (#2128) 2022-05-16 16:16:55 +03:00
Owen Rumney
267adde71b fix: remove Highlighted from json output 2022-05-16 13:48:08 +01:00
Liam Galvin
b7fc3dfc98 fix(misconf): Fix coloured output in Goland terminal (#2126) 2022-05-16 15:26:23 +03:00
Liam Galvin
95285015df chore(deps): Update defsec to v0.57.6 (fanal#528)
* chore(deps): Update defsec to v0.57.6
2022-05-16 12:07:34 +01:00
thiago-gitlab
89893a7303 docs(secret): Fix default value of --security-checks in docs (#2107)
* Fix default value of --security-checks in docs

* Add missing value to security-checks option
2022-05-16 10:49:10 +03:00
Teppei Fukuda
dbba0bf152 refactor(report): move colorize function from trivy-db (#2122) 2022-05-15 20:53:24 +03:00
Jose Donizetti
3ef450d9a4 feat: k8s resource scanning (#2118) 2022-05-15 19:01:58 +03:00
Teppei Fukuda
f4ec4e7483 chore: add CODEOWNERS (#2121) 2022-05-15 16:02:41 +03:00
afdesk
96a5cb106a feat(image): add --server option for remote scans (#1871)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-15 14:56:48 +03:00
Jose Donizetti
023e09e3f3 refactor: k8s (#2116)
* refactor: add pkg/k8s

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>

* refactor: extract scanner

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>

* refactor: extract scanVulns

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>

* refactor: extract scanMisconfigs

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>

* refactor: extract filter

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>

* refactor: improve k8s/run.go

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>

* fix(k8s): code improvements

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>

* chore: go mod tidy

Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-15 08:07:31 -03:00
Teppei Fukuda
b3759f54fa refactor: export useful APIs (#2108)
Co-authored-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-13 22:09:20 +03:00
Jose Donizetti
dbf4b2dec5 docs: fix k8s doc (#2114)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-13 22:04:09 +03:00
Owen Rumney
2ae8faa7a8 feat(kubernetes): Add report flag for summary (#2112)
* feat(k8s): Add report flag for summary
* chore: add headings to the severity columns
* chore: make the default output of k8s summary table

Signed-off-by: Owen Rumney <owen.rumney@aquasec.com>
2022-05-13 19:02:01 +01:00
Liam Galvin
5f004f03d9 fix: Remove problematic advanced rego policies (#2113)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-13 20:28:57 +03:00
Liam Galvin
3679bc358c feat(misconf): Add special output format for misconfigurations (#2100) 2022-05-13 19:59:02 +03:00
Liam Galvin
0911eea9c0 chore(deps): Update defsec to v0.57.5 (remove commercial rego rules) (fanal#527) 2022-05-13 17:35:15 +01:00
Jose Donizetti
029dd76c30 feat: add k8s subcommand (#2065)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-12 21:11:29 +03:00
dependabot[bot]
cc5d76b4ee chore(deps): bump github.com/Azure/azure-sdk-for-go (fanal#518) 2022-05-12 09:38:03 +03:00
DmitriyLewen
be3993b60a fix(secrets): skip aws secrets of greater length (fanal#514) 2022-05-12 09:21:42 +03:00
Jose Donizetti
a39133a13c chore: fix make lint version (#2102)
Signed-off-by: Jose Donizetti <jdbjunior@gmail.com>
2022-05-11 22:58:48 +03:00
Shira Cohen
995024f148 fix(java): handle relative pom modules (#2101) 2022-05-11 16:04:03 +03:00
Liam Galvin
3487accd99 chore(deps): Update defsec to v0.57.3 for improved syntax highlighting (fanal#524)
* chore(deps): Update defsec to v0.57.3 for improved syntax highlighting
2022-05-11 12:52:04 +01:00
Liam Galvin
c8e07a4bf8 chore(deps): Update defsec to v0.56.2 (fanal#523) 2022-05-10 16:36:46 +01:00
Shira Cohen
4249a1cadb Pom modules (fanal#511) 2022-05-10 18:25:57 +03:00
Liam Galvin
c9f9a346cc fix(misconf): Add missing links for non-rego misconfig results (#2094) 2022-05-10 17:52:34 +03:00
Liam Galvin
52934d2340 feat: Add causal code to misconfig results (fanal#522) 2022-05-10 13:52:56 +01:00
Liam Galvin
5a58e41476 feat(misconf): Added fs.FS based scanning via latest defsec (#2084)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-10 15:05:00 +03:00
Liam Galvin
329f071b30 chore(deps): Update defsec for 'builtin' namespaced rego policies (fanal#521) 2022-05-10 11:37:59 +01:00
Liam Galvin
154ccc6e35 chore(deps): Update defsec to v0.55.5 (adds freebsd support) (fanal#520) 2022-05-10 09:55:23 +01:00
Teppei Fukuda
49cfa08d25 fix(handler): import go mod handler (fanal#519) 2022-05-09 23:35:58 +03:00
Teppei Fukuda
bcc0218200 feat: add post handler (fanal#460)
Co-authored-by: Liam Galvin <liam.galvin@aquasec.com>
Co-authored-by: Liam Galvin <liamgalvin@protonmail.com>
2022-05-09 22:43:39 +03:00
Teppei Fukuda
fbb83c42d9 chore(deps): bump trivy-issue-action to v0.0.4 (#2091) 2022-05-06 20:45:02 +03:00
dependabot[bot]
8a4b49ca70 chore(deps): bump github.com/twitchtv/twirp (#2077) 2022-05-06 19:04:34 +03:00
dependabot[bot]
7ba773f2bb chore(deps): bump github.com/urfave/cli/v2 from 2.4.0 to 2.5.1 (#2074) 2022-05-06 18:20:50 +03:00
DmitriyLewen
bd94618b34 chore(os): updated fanal version and alpine distroless test (#2086) 2022-05-06 18:18:59 +03:00
dependabot[bot]
5feabc10ee chore(deps): bump github.com/aws/aws-sdk-go from 1.43.31 to 1.44.5 (fanal#512) 2022-05-03 19:36:17 +03:00
dependabot[bot]
fa03e9e983 chore(deps): bump github.com/open-policy-agent/opa from 0.39.0 to 0.40.0 (fanal#506) 2022-05-03 19:25:27 +03:00
dependabot[bot]
fa5dcaf8f2 chore(deps): bump github.com/CycloneDX/cyclonedx-go from 0.5.1 to 0.5.2 (#2075) 2022-05-03 19:07:20 +03:00
AndreyLevchenko
6d8ae1959c feat(lang): add parent dependencies (fanal#459)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-03 19:06:36 +03:00
Teppei Fukuda
d137df24f7 feat(analyzer): more general support for os-release (fanal#470)
Co-authored-by: DmitriyLewen <dmitriy.lewen@smartforce.io>
2022-05-03 19:06:02 +03:00
dependabot[bot]
2c57716359 chore(deps): bump github.com/samber/lo from 1.16.0 to 1.19.0 (#2076) 2022-05-03 19:00:31 +03:00
VaismanLior
d08f3dfd6d refactor(secret): allow list match with secret subgroups (fanal#510)
* refactor(secret): allow list match with secret subgroups

* chore(secret): ignore locale/locales

* added tests to allow rules refactor

* update builtin avoid-tests rule

* update builtin avoid-tests rule desc
2022-05-03 15:02:53 +03:00
dependabot[bot]
346496f943 chore(deps): bump github.com/Azure/go-autorest/autorest (fanal#509) 2022-05-03 14:49:01 +03:00
Shira Cohen
6601d2957a feat(report): add support for SPDX (#2059)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-05-02 13:44:26 +03:00
dependabot[bot]
2e870836dd chore(deps): bump github.com/samber/lo from 1.15.0 to 1.19.0 (fanal#505) 2022-05-02 09:04:10 +03:00
dependabot[bot]
4066b57a84 chore(deps): bump actions/setup-go from 2 to 3 (fanal#499) 2022-05-02 09:03:39 +03:00
dependabot[bot]
6e2453c2d6 chore(deps): bump actions/setup-go from 2 to 3 (#2073) 2022-05-02 08:59:40 +03:00
dependabot[bot]
7c94df539c chore(deps): bump actions/cache from 3.0.1 to 3.0.2 (#2071) 2022-05-02 08:59:11 +03:00
dependabot[bot]
8c33bae5a8 chore(deps): bump golang from 1.18.0 to 1.18.1 (#2069) 2022-05-02 08:58:47 +03:00
dependabot[bot]
2cdacc1517 chore(deps): bump actions/stale from 4 to 5 (#2070) 2022-05-02 08:54:51 +03:00
dependabot[bot]
9acb240fdc chore(deps): bump sigstore/cosign-installer from 2.0.0 to 2.3.0 (#2072) 2022-05-02 08:52:44 +03:00
dependabot[bot]
4b193b4712 chore(deps): bump github.com/open-policy-agent/opa from 0.39.0 to 0.40.0 (#2079) 2022-05-02 08:47:19 +03:00
VaismanLior
1f5b26254b feat(secret): add default secret severity (fanal#497) 2022-05-01 12:41:01 +03:00
Carol Valencia
79d1a0163f chore: app version 0.27.0 (#2046)
Co-authored-by: carolina valencia <krol3@users.noreply.github.com>
2022-04-30 17:20:22 +03:00
DmitriyLewen
c1b4b5be16 fix(misconf): added to skip conf files if their scanning is not enabled (#2066)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-04-30 17:12:23 +03:00
VaismanLior
bbe490b162 docs(secret) fix rule path in docs (#2061) 2022-04-30 16:45:20 +03:00
DmitriyLewen
eb0da23d53 chore(analyzer): added array of config file analyzers (fanal#498) 2022-04-30 16:42:03 +03:00
MaineK00n
78286aaff1 docs: change from go.sum to go.mod (#2056) 2022-04-27 14:54:49 +03:00
afdesk
4f9e46c8d3 chore(deps): update defsec for fix CVE-2022-27191 inside x/crypto (fanal#495) 2022-04-27 09:32:26 +03:00
dependabot[bot]
55f29b8fb2 chore(deps): bump github.com/CycloneDX/cyclonedx-go from 0.5.0 to 0.5.1 (#1926)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-04-26 19:39:38 +03:00
Oran Moshai
b6baa65ff2 refactor(fs): scanner options (#2050)
To allow Trivy plugins create InitializeScanner signature scanner options need to be public

Co-authored-by: oranmoshai <oran.moshai@aquasec.com>
2022-04-26 16:05:27 +03:00
Teppei Fukuda
4b8e0ec2ea feat(secret): truncate long line (#2052) 2022-04-26 15:56:25 +03:00
Teppei Fukuda
1a6d9cb1b0 feat(secret): truncate matched line if it is long (fanal#494) 2022-04-26 14:52:53 +03:00
Teppei Fukuda
cf78a436d2 docs: fix a broken bullets (#2042) 2022-04-26 10:42:09 +03:00
jeffalder
f8c2ced302 feat(ubuntu): add 22.04 approx eol date (#2044)
Add support for Ubuntu 22.04 LTS, Jammy Jellyfish: https://lists.ubuntu.com/archives/ubuntu-announce/2022-April/000279.html
2022-04-26 10:35:26 +03:00
tomthetommy
84c199428f docs: update installation.md (#2027) 2022-04-26 10:20:47 +03:00
nishipy
bdf55e16db docs: add Containerfile (#2032) 2022-04-26 10:17:24 +03:00
DmitriyLewen
9fd86da367 fix(go): fixed panic to scan gomod without version (#2038) 2022-04-25 16:04:44 +03:00
DmitriyLewen
acaa8dd0be fix(go.mod): fixed panic for gomod without version (fanal#492) 2022-04-25 10:19:28 +03:00
Teppei Fukuda
fbc9030db6 docs(mariner): confirm it works with Mariner 2.0 VM (#2036) 2022-04-25 10:17:51 +03:00
Teppei Fukuda
db6eb9a15b feat(secret): allow rubygems path (fanal#493) 2022-04-25 10:16:35 +03:00
Teppei Fukuda
e2a31abd19 feat(secret): support enable rules (#2035)
Co-authored-by: VaismanLior <97836016+VaismanLior@users.noreply.github.com>
2022-04-24 19:04:30 +03:00
Teppei Fukuda
1d1f8f91c0 refactor(secret): split a file including built-in rules (fanal#491) 2022-04-24 17:51:04 +03:00
Carol Valencia
708a7a7175 chore: app version 26.0 (#2030)
Co-authored-by: carolina valencia <krol3@users.noreply.github.com>
2022-04-24 15:27:36 +03:00
Teppei Fukuda
04040b95f8 feat(secret): add enable-builtin-rules (fanal#488) 2022-04-24 15:22:31 +03:00
Teppei Fukuda
e000329ec4 docs(secret): add a demo movie (#2031) 2022-04-24 11:56:27 +03:00
VaismanLior
142d67f296 feat(secret): more builtin aws rules (fanal#489) 2022-04-24 11:54:56 +03:00
Teppei Fukuda
e127334664 feat: support cache TTL in Redis (#2021) 2022-04-22 23:19:01 +03:00
Teppei Fukuda
3870515a81 fix(go): skip system installed binaries (#2028) 2022-04-22 19:20:31 +03:00
Teppei Fukuda
4e6389af27 fix(go): check if go.sum is nil (#2029) 2022-04-22 18:50:01 +03:00
Teppei Fukuda
5f047f97db feat: add secret scanning (#1901)
Co-authored-by: VaismanLior <97836016+VaismanLior@users.noreply.github.com>
Co-authored-by: AMF <work@afdesk.com>
2022-04-22 17:08:18 +03:00
Carol Valencia
0700586483 chore: gh publish only with push the tag release (#2025)
Co-authored-by: carolina valencia <krol3@users.noreply.github.com>
2022-04-22 16:58:04 +03:00
Teppei Fukuda
34de675d87 feat(redis): support TTL (fanal#480) 2022-04-22 16:42:05 +03:00
Teppei Fukuda
1f393c12d5 fix(fs): ignore permission errors (#2022) 2022-04-22 11:47:56 +03:00
Teppei Fukuda
4dd5732125 feat(hook): skip system installed Go binaries (fanal#481) 2022-04-22 11:47:29 +03:00
MaineK00n
1e788040c5 fix(hook/gomod): check if gosum is nil (fanal#487) 2022-04-22 07:50:21 +03:00
Teppei Fukuda
ca57d318da fix(secret): take only config file name (fanal#486) 2022-04-22 00:12:05 +03:00
Teppei Fukuda
03b16ea0ba feat(secret): check if the config file exists (fanal#485) 2022-04-21 23:43:36 +03:00
Teppei Fukuda
bec2e29c59 feat(secret): ignore the secret config file (fanal#484) 2022-04-21 23:43:18 +03:00
Teppei Fukuda
b4ddc80c99 feat(image): disable secret scanning in base layers (fanal#483) 2022-04-21 19:15:06 +03:00
Teppei Fukuda
2061873f22 fix(secret): end line number is the same as start line number (fanal#482) 2022-04-21 19:14:52 +03:00
Teppei Fukuda
254a96e1d3 feat: add secret scanning (fanal#431)
Co-authored-by: VaismanLior <97836016+VaismanLior@users.noreply.github.com>
2022-04-21 18:15:37 +03:00
afdesk
110c534015 test(mod): using correct module inside test go.mod (#2020) 2022-04-21 16:48:33 +03:00
Teppei Fukuda
dff5dcea70 fix(analyzer): ignore permission errors (fanal#477) 2022-04-21 12:51:03 +03:00
Teppei Fukuda
c7e8d201dc chore: disable benchmark (fanal#478) 2022-04-21 12:42:32 +03:00
bgoareguer
525e2685ce feat(server): re-add proxy support for client/server communications (#1995) 2022-04-21 12:32:46 +03:00
nishipy
471e7cd5a4 Add Containerfile to requiredFiles (fanal#475) 2022-04-21 12:29:55 +03:00
afdesk
9898ac9251 fix(report): truncate a description before escaping in ASFF template (#2004) 2022-04-18 18:10:47 +03:00
afdesk
453a1edfd2 fix(cloudformation): correct margin removal for empty lines (#2002) 2022-04-17 21:46:01 +03:00
afdesk
8cd973739a fix(deps): correct margin removal for empty lines inside defsec (fanal#471) 2022-04-16 22:13:37 +03:00
afdesk
407f3b668b fix(template): correct check of old sarif template files (#2003) 2022-04-16 13:10:48 +03:00
DmitriyLewen
67004a2b12 fix(python): fixed panic when scan .egg archive (fanal#446)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-04-14 11:34:17 +03:00
DmitriyLewen
528d07ef37 feat(alpine): add parsing /etc/apk/repositories file to get OS version (fanal#462)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-04-13 18:31:30 +03:00
Teppei Fukuda
065b301414 feat(golang): add support for go.mod (fanal#465) 2022-04-13 13:35:52 +03:00
Owen Rumney
0e28f7ccb6 Merge pull request fanal#463 from aquasecurity/liamg-fix-owens-demo
fix(cloudformation): add filename to cf results
2022-04-12 10:07:08 +01:00
Liam Galvin
910b8e6017 fix: add filename to cf results 2022-04-12 09:59:26 +01:00
Jan-Otto Kröpke
5f69847698 fix(pom): merge multiple pom imports in a good manner (fanal#457) 2022-04-06 11:40:15 +03:00
dependabot[bot]
3637c00b51 chore(deps): bump github.com/docker/docker (fanal#440) 2022-04-06 10:27:06 +03:00
dependabot[bot]
8bdd3feb3f chore(deps): bump github.com/urfave/cli/v2 from 2.3.0 to 2.4.0 (fanal#442) 2022-04-05 20:53:33 +03:00
afdesk
85351adfa8 chore(deps): update BurntSushi/toml for fix runtime error (fanal#454) 2022-04-05 16:19:07 +03:00
Liam Galvin
fbf50203cc fix(iac): Added missing metadata to resolve Terraform scanning errors (fanal#455)
Signed-off-by: Liam Galvin <liam.galvin@aquasec.com>
2022-04-05 16:14:54 +03:00
Kobus van Schoor
18fde60392 feat(jar): allow setting Maven Central URL using environment variable (fanal#448)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-04-05 00:39:28 +03:00
dependabot[bot]
c2f38ee378 chore(deps): bump github.com/open-policy-agent/opa from 0.37.2 to 0.39.0 (fanal#434) 2022-04-04 23:43:54 +03:00
dependabot[bot]
a545e3af04 chore(deps): bump github.com/Azure/azure-sdk-for-go (fanal#438) 2022-04-04 23:33:58 +03:00
Teppei Fukuda
c039177958 refactor(golang): use debug/buildinfo (fanal#453) 2022-04-04 23:30:26 +03:00
afdesk
86e72c0a43 chore(ci): enable gofmt linter (fanal#452) 2022-04-04 23:30:06 +03:00
Teppei Fukuda
177826a458 chore: bump up Go to 1.18 (fanal#449) 2022-04-04 20:00:08 +03:00
Liam Galvin
133c838902 fix: Update defsec to v0.28.3 to fix panics (fanal#450) 2022-04-04 16:52:52 +01:00
dependabot[bot]
da3d588276 chore(deps): bump github.com/Azure/go-autorest/autorest (fanal#441) 2022-04-04 18:03:10 +03:00
dependabot[bot]
9766c47042 chore(deps): bump actions/checkout from 2 to 3 (fanal#432) 2022-04-04 17:04:28 +03:00
dependabot[bot]
db66572127 chore(deps): bump github.com/aws/aws-sdk-go from 1.43.8 to 1.43.31 (fanal#445) 2022-04-04 17:03:54 +03:00
DmitriyLewen
c3e132ade5 refactor(cache messages): changed messages about missing Image and Layers in cache (fanal#447) 2022-04-04 16:24:06 +03:00
dependabot[bot]
b194140c52 chore(deps): bump github.com/go-redis/redis/v8 from 8.11.4 to 8.11.5 (fanal#437) 2022-04-04 11:45:11 +03:00
dependabot[bot]
d048791355 chore(deps): bump github.com/Azure/azure-sdk-for-go (fanal#409) 2022-03-30 18:01:11 +03:00
Owen Rumney
005fe25c75 Merge pull request fanal#429 from aquasecurity/owenr-fix-issue-no-filename
fix: handle no filename comeing through from defsec
2022-03-28 17:17:13 +01:00
Owen Rumney
aac7cf576e fix: catch results where the filename is not specified
This is being mitigated in defsec as well to prevent results with no
filename getting through to fanal

Signed-off-by: Owen Rumney <owen.rumney@aquasec.com>
2022-03-28 17:07:28 +01:00
dependabot[bot]
fe1f9c916f chore(deps): bump github.com/GoogleCloudPlatform/docker-credential-gcr (fanal#360) 2022-03-27 10:55:58 +03:00
afdesk
9e3709fb09 feat(cache): add DeleteBlobs to ArtifactCache (fanal#426) 2022-03-24 17:42:34 +02:00
dependabot[bot]
ee54733e7b chore(deps): bump github.com/testcontainers/testcontainers-go from 0.11.1 to 0.12.0 (fanal#375)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-03-22 20:23:43 +02:00
afdesk
e913433934 fix(docker): getting an image by ID or a name with tag (fanal#425) 2022-03-17 20:10:13 +02:00
Ankush K
483697b416 feat(walker): export default skip variables (fanal#418) 2022-03-14 16:24:09 +02:00
Ankush K
dcadfa883d fix(filter-hook): systemfiles filter for custom resources (fanal#419) 2022-03-13 18:26:07 +02:00
Owen Rumney
bfd6eef94c Merge pull request fanal#421 from aquasecurity/owenr-defend-npe-issues
chore(deps): update tfsec and defsec
2022-03-09 11:53:21 +00:00
Owen Rumney
69be985153 chore: update tfsec and defsec 2022-03-09 11:38:44 +00:00
DmitriyLewen
4d625c21e6 feat(docker): add support for scanning docker image with ImageID (fanal#405)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-03-03 18:23:45 +02:00
bestgopher
7663c9f902 fix(hcl2json): fix panic in hcl2json (fanal#417)
update hcl2json@v0.3.3 -> 0.3.4
2022-03-03 15:11:10 +02:00
Owen Rumney
c3279fd9b2 Merge pull request fanal#416 from aquasecurity/dependabot/go_modules/github.com/aquasecurity/tfsec-1.5.0
chore(deps): bump github.com/aquasecurity/tfsec from 1.4.1 to 1.5.0
2022-03-03 09:20:13 +00:00
Owen Rumney
7443cba9b5 Merge branch 'main' into dependabot/go_modules/github.com/aquasecurity/tfsec-1.5.0 2022-03-03 08:26:37 +00:00
Owen Rumney
49301ccf6d Merge pull request fanal#415 from aquasecurity/dependabot/go_modules/github.com/aquasecurity/defsec-0.14.0
chore(deps): bump github.com/aquasecurity/defsec from 0.12.1 to 0.14.0
2022-03-03 08:26:04 +00:00
dependabot[bot]
6e222bd809 chore(deps): bump golangci/golangci-lint-action from 2 to 3.1.0 (fanal#408) 2022-03-03 10:09:10 +02:00
dependabot[bot]
8c522a76af chore(deps): bump github.com/aquasecurity/tfsec from 1.4.1 to 1.5.0
Bumps [github.com/aquasecurity/tfsec](https://github.com/aquasecurity/tfsec) from 1.4.1 to 1.5.0.
- [Release notes](https://github.com/aquasecurity/tfsec/releases)
- [Changelog](https://github.com/aquasecurity/tfsec/blob/master/.goreleaser.yml)
- [Commits](https://github.com/aquasecurity/tfsec/compare/v1.4.1...v1.5.0)

---
updated-dependencies:
- dependency-name: github.com/aquasecurity/tfsec
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-03 08:04:55 +00:00
dependabot[bot]
7fe75d50a0 chore(deps): bump github.com/aquasecurity/defsec from 0.12.1 to 0.14.0
Bumps [github.com/aquasecurity/defsec](https://github.com/aquasecurity/defsec) from 0.12.1 to 0.14.0.
- [Release notes](https://github.com/aquasecurity/defsec/releases)
- [Commits](https://github.com/aquasecurity/defsec/compare/v0.12.1...v0.14.0)

---
updated-dependencies:
- dependency-name: github.com/aquasecurity/defsec
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-03-03 08:04:53 +00:00
Teppei Fukuda
0e84c4dcbf fix(pom): keep an order of dependencies (fanal#413) 2022-03-03 10:03:09 +02:00
dependabot[bot]
82d9d4b77f chore(deps): bump github.com/aws/aws-sdk-go from 1.42.51 to 1.43.8 (fanal#411) 2022-03-01 18:16:24 +02:00
afdesk
525aadf14c fix(deps): correct handling a package name with a hyphen (fanal#407) 2022-02-25 11:58:22 +02:00
Owen Rumney
b72fa66c77 Merge pull request fanal#406 from aquasecurity/owenr-update-iac-scanning
chore: update the defsec and tfsec versions
2022-02-21 14:18:23 +00:00
DmitriyLewen
f2e05d55d0 fix(hook): fix skip of language-specific files when scanning rootfs directory (fanal#380) 2022-02-21 15:35:08 +02:00
Owen Rumney
1e9376bea4 chore: update the defsec and tfsec versions
- rework some of the iac tests to be more flexible to change
- update the scanner to use the moved parser
  - everything is now in defsec now for CF parsing, scanning and testing
2022-02-21 09:56:02 +00:00
dependabot[bot]
0805e8667e chore(deps): bump go.uber.org/zap from 1.20.0 to 1.21.0 (fanal#404) 2022-02-11 20:08:15 +02:00
dependabot[bot]
f8eb21d63a chore(deps): bump github.com/alicebob/miniredis/v2 from 2.17.0 to 2.18.0 (fanal#383) 2022-02-11 14:39:10 +02:00
dependabot[bot]
ed00632796 chore(deps): bump github.com/Azure/azure-sdk-for-go (fanal#389) 2022-02-11 14:38:30 +02:00
dependabot[bot]
1277e211ca chore(deps): bump github.com/Azure/go-autorest/autorest/azure/auth (fanal#386) 2022-02-11 14:37:52 +02:00
dependabot[bot]
5c663d389d chore(deps): bump github.com/aws/aws-sdk-go from 1.42.30 to 1.42.51 (fanal#403) 2022-02-11 14:37:16 +02:00
dependabot[bot]
411e5b8c97 chore(deps): bump github.com/open-policy-agent/opa from 0.36.1 to 0.37.2 (fanal#401) 2022-02-11 14:34:28 +02:00
Teppei Fukuda
327688504c chore(dependabot): set interval to monthly (fanal#399) 2022-02-11 14:24:43 +02:00
MaineK00n
b9a7fd1547 feat(rpm): detect RPM databases in SQLite3 format (fanal#381)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-02-09 13:16:51 +02:00
Ankush K
9825529600 fix(applier): modify apply layer to merge custom resources as well (fanal#369) 2022-02-08 12:49:02 +02:00
Teppei Fukuda
4310d51b7e refactor: rename quiet with no progress (fanal#392) 2022-02-02 16:16:03 +02:00
Masahiro331
c04a638d1a feat(mariner) add CBL-Mariner analyzer (fanal#387) 2022-01-29 19:49:24 +02:00
Teppei Fukuda
ffb5c8520f feat(analyzer): support Red Hat build info (fanal#151) 2022-01-28 15:31:14 +02:00
Christian Groschupp
533498f4f0 feat(token): add azure token auth (fanal#371)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-01-19 14:52:36 +02:00
Teppei Fukuda
2768c280c9 chore: bump Go to 1.17 (fanal#379) 2022-01-19 13:42:18 +02:00
dependabot[bot]
4e8832de4f chore(deps): bump github.com/open-policy-agent/opa from 0.36.0 to 0.36.1 (fanal#378) 2022-01-19 11:39:51 +02:00
dependabot[bot]
4b6109746e chore(deps): bump github.com/BurntSushi/toml from 0.4.1 to 1.0.0 (fanal#376) 2022-01-18 10:25:27 +02:00
dependabot[bot]
c6daf1a896 chore(deps): bump go.uber.org/zap from 1.19.1 to 1.20.0 (fanal#358) 2022-01-17 16:21:52 +02:00
DmitriyLewen
d2a4db8887 feat(java): add support PAR files (fanal#373) 2022-01-17 16:10:50 +02:00
dependabot[bot]
abf0055634 chore(deps): bump github.com/docker/docker (fanal#363)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-16 21:01:42 +02:00
AndreyLevchenko
9806fa6f92 chore(deps): update hcl2json dependency (fanal#368) 2022-01-12 14:21:46 +02:00
DmitriyLewen
c4fdc40f82 fix(rpm): do not ignore installed files via third-party rpm (fanal#367)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2022-01-12 14:19:16 +02:00
jerbob92
1bb7e4894e Allow to scan a single file (fanal#356)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2022-01-11 18:25:55 +02:00
dependabot[bot]
d081855849 chore(deps): bump github.com/open-policy-agent/opa from 0.34.0 to 0.36.0 (fanal#362) 2022-01-11 14:54:41 +02:00
dependabot[bot]
ab0cb4f73b chore(deps): bump github.com/alicebob/miniredis/v2 from 2.16.0 to 2.17.0 (fanal#361) 2022-01-11 14:47:19 +02:00
DmitriyLewen
49a72f216f feat: added insecure tls skip to scan repo (fanal#352) 2022-01-11 14:07:22 +02:00
dependabot[bot]
0c8521a856 chore(deps): bump github.com/aws/aws-sdk-go from 1.42.0 to 1.42.30 (fanal#365) 2022-01-10 18:34:30 +02:00
Teppei Fukuda
89fa4a27ab feat(analyzer): introduce analyzer group (fanal#340) 2022-01-10 16:32:07 +02:00
afdesk
0d2edbfa36 fix: crash of handling compressed layers (fanal#354) 2022-01-05 19:02:35 +02:00
Teppei Fukuda
996961a33f fix(java/pom): ignore unsupported requirements (fanal#351) 2021-12-24 22:57:55 +02:00
Teppei Fukuda
e9251fe0a8 feat(jar): mark JAR as individual packages (fanal#350) 2021-12-24 14:29:44 +02:00
Teppei Fukuda
965400a481 feat(java): support offline mode (fanal#349) 2021-12-24 08:26:10 +02:00
Masahiro331
310dd3f5c0 fix(analyzer): improve performance (fanal#314)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-12-23 20:15:36 +02:00
Teppei Fukuda
91d4d9e385 feat(java): support pom.xml (fanal#346) 2021-12-23 14:27:27 +02:00
afdesk
88094b1142 chore(deps): bump github.com/moby/buildkit from 0.8.1 to 0.9.3 (fanal#347) 2021-12-22 16:09:33 +02:00
Teppei Fukuda
c287239236 feat(jar): add file path (fanal#345) 2021-12-21 07:58:05 +02:00
Dirk Mueller
0a17306666 Also detect RPM databases in NDB format (fanal#341)
RPM databases in the native DB format rather than the traditional
Berkeley DB format are stored as different filenames, so detect
those as well.
2021-12-19 11:37:10 +02:00
Owen Rumney
c506f43613 chore(deps): Update tfsec version (fanal#339)
* Update the tfsec version

- get support for custom checks in the tfsec external scanner

* Pass debug through to tfsec
2021-12-16 13:41:28 +02:00
DmitriyLewen
7e09a9f84a fix: fixed skipFiles/skipDirs flags for relative path (fanal#342) 2021-12-15 19:33:05 +02:00
afdesk
f733307991 chore: removed old tfsec dependencies. (fanal#337)
There were removed several old dependencies after `go mod tidy`.
2021-12-06 11:12:33 +02:00
Owen Rumney
bb5abd4cc7 Merge pull request fanal#336 from aquasecurity/owenr-update-tfsec-and-cfsec
chore(deps): updating code scanning
2021-11-30 14:55:58 +00:00
Owen Rumney
18d683af15 Update code scanning dependencies
- update cfsec
- update tfsec
2021-11-30 14:47:36 +00:00
AndreyLevchenko
6793d65417 fix(hooks): exclude go from filtering (fanal#332)
* fix(hooks): exclude go from filtering

* Limited scope to individual packages

Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2021-11-29 09:41:51 +02:00
Matthieu MOREL
776f0ec16d ci(lint) : setup golangci-lint-action (fanal#256)
* build(lint): setup golangci-lint-action

Signed-off-by: Matthieu MOREL <mmorel-35@users.noreply.github.com>

* skip go installation

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-11-29 09:36:55 +02:00
Alex
0523fbc6be allow suppressing the git clone output by setting the quiet option (fanal#335) 2021-11-29 09:08:34 +02:00
Guilherme Macedo
95afbb1a11 feat(repo): add authentication to git HTTP operation (fanal#253) 2021-11-28 09:28:47 +02:00
DmitriyLewen
7d550ea025 fix(applier): fixed layer applications update (fanal#333)
* Fix(Docker-image): fixed update applications
Closes trivy issue fanal#1407

* Test: added tests for Docker ApplyLayers

* test(applier): simplify the case

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-11-28 08:44:30 +02:00
rahul2393
1ac6e8aef6 chore: update go-dep-parser dependency to fix pip parsing issue (fanal#330) 2021-11-11 11:02:23 +02:00
Owen Rumney
b640ef099c chore(dep): bump cfsec version from v0.0.11 to v0.0.12 (fanal#329) 2021-11-10 13:12:15 +00:00
Owen Rumney
a688cdf7af feature(iac): Add location and resource to Results (fanal#328)
* feature(iac): Add location and resource to Results

- add the iac resource and line in file information for tfsec and cfsec
- update the version of tfsec and cfsec
2021-11-10 10:48:56 +00:00
Owen Rumney
0abfcf53e4 Merge pull request fanal#327 from aquasecurity/owenr-bump-cfsec-version 2021-11-10 06:44:16 +00:00
Owen Rumney
e0dfc37ef5 fix the test for cfsec output 2021-11-09 21:01:46 +00:00
Owen Rumney
3f52e32786 chore(deps): Bump cfsec version to get the resource
- cfsec now has the resource name in the message for the issue
2021-11-09 20:28:06 +00:00
dependabot[bot]
0dbcb834ef chore(deps): bump github.com/docker/docker (fanal#315) 2021-11-09 15:57:36 +02:00
dependabot[bot]
6ad9b2558a chore(deps): bump github.com/aws/aws-sdk-go from 1.41.0 to 1.42.0 (fanal#325) 2021-11-09 15:01:21 +02:00
Owen Rumney
6726d12587 Merge pull request fanal#321 from owenrumney/owenr-add-cfsec-support
add support for cfsec
2021-11-09 10:41:27 +00:00
Owen Rumney
41c0dbb767 Add Cloudformation analyzer 2021-11-08 16:24:21 +00:00
Owen Rumney
0d03242cfc add support for cfsec 2021-11-08 16:23:09 +00:00
Teppei Fukuda
8a6775ad14 fix(daemon): handle nil config (fanal#322) 2021-11-03 15:14:17 +02:00
dependabot[bot]
2674ce89ea chore(deps): bump github.com/aquasecurity/tfsec from 0.58.11 to 0.58.14 (fanal#307) 2021-11-01 16:43:01 +02:00
dependabot[bot]
802cc6fb26 chore(deps): bump github.com/open-policy-agent/opa from 0.32.0 to 0.34.0 (fanal#319) 2021-11-01 16:42:23 +02:00
dependabot[bot]
b0de7fc645 chore(deps): bump github.com/alicebob/miniredis/v2 from 2.15.1 to 2.16.0 (fanal#316) 2021-11-01 14:24:11 +02:00
Teppei Fukuda
223b1fd118 fix(yarn): support quoted version 2021-10-14 18:23:24 +03:00
dependabot[bot]
0ad38f33bc chore(deps): bump github.com/aws/aws-sdk-go from 1.40.49 to 1.41.0 (fanal#309) 2021-10-12 12:52:41 +03:00
dependabot[bot]
894d65898d chore(deps): bump github.com/go-redis/redis/v8 from 8.11.3 to 8.11.4 (fanal#308) 2021-10-12 10:55:35 +03:00
santhosh1729
7c72035b87 feat(javascript) : Add JavaScript const to support custom javascript analyser (fanal#304) 2021-10-07 09:09:30 +03:00
santhosh1729
1829e36541 refactor: add ctx object to analyser (fanal#303) 2021-10-06 16:48:50 +03:00
Teppei Fukuda
d974076fe1 refactor(types): merge LibraryInfo into Package (fanal#302) 2021-10-05 20:20:59 +03:00
Teppei Fukuda
5eb94f785b fix(artifact): remove default disabled analyzers (fanal#300) 2021-10-04 17:47:17 +03:00
Huang Huang
173b3eb654 fix(config/yaml): support yaml files which incompatible with json spec (fanal#296) 2021-10-04 13:36:28 +03:00
Teppei Fukuda
c80126ab41 feat(daemon): add more config fields (fanal#299)
* feat(daemon): add more config fields

* test(daemon): add more fields
2021-10-04 10:01:00 +03:00
Masahiro331
7e9fd6719c feat(applier/docker) aggregate jar result (fanal#298) 2021-10-03 14:12:25 +03:00
Huang Huang
b76899c318 fix(rpm): don't panic when parse source rpm name failed (fanal#297)
* fix(rpm): don't panic when parse source rpm name failed

* fix review suggestions
2021-10-03 13:24:25 +03:00
Teppei Fukuda
a2b995a671 feat: skip files and dirs (fanal#284) 2021-10-01 19:59:56 +03:00
afdesk
12463ce1b0 fix(oci): handling of complex image indexes (fanal#262) 2021-09-30 15:37:13 +03:00
dependabot[bot]
9b78112814 chore(deps): bump github.com/mitchellh/mapstructure from 1.4.1 to 1.4.2 (fanal#289) 2021-09-30 15:26:47 +03:00
Owen Rumney
ad721cf154 Chore(dep): update the tfsec version (fanal#291)
- Latest tfsec version has many more checks and also includes the AVD ID

Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2021-09-30 12:15:11 +03:00
afdesk
96f7cc774a fix(go-binary): skip large files (fanal#294) 2021-09-30 12:09:21 +03:00
Teppei Fukuda
843813c0f3 feat(analyzer): add group consts (fanal#293) 2021-09-29 10:57:52 +03:00
dependabot[bot]
94460305f3 chore(deps): bump golang.org/x/mod from 0.5.0 to 0.5.1 (fanal#290) 2021-09-29 10:24:20 +03:00
dependabot[bot]
f7329d0d9f chore(deps): bump github.com/aws/aws-sdk-go from 1.40.45 to 1.40.49 (fanal#287) 2021-09-29 09:42:38 +03:00
Ankush K
b04be6834a fix(configfile-metadata): Enriched configfile metadata with OS value (fanal#286) 2021-09-28 09:42:06 +03:00
dependabot[bot]
791cf73bcb chore(deps): bump github.com/aws/aws-sdk-go from 1.40.37 to 1.40.45 (fanal#283) 2021-09-19 20:58:46 +03:00
Teppei Fukuda
92d1b61b5d fix(go/binary): ignore unrecognized exe error (fanal#282) 2021-09-19 20:37:19 +03:00
dependabot[bot]
7f5b5a6aa8 chore(deps): bump go.uber.org/zap from 1.19.0 to 1.19.1 (fanal#272) 2021-09-19 20:30:10 +03:00
Teppei Fukuda
dd49885a45 fix(go/binary): check file mode (fanal#281) 2021-09-19 18:15:17 +03:00
MaineK00n
eec42da179 feat(analyzer): support AlmaLinux and Rocky Linux (fanal#193) 2021-09-19 11:01:25 +03:00
Teppei Fukuda
074587e22a fix(image): disable node.js analyzers depending on mode (fanal#279)
* fix(image): disable node.js analyzers depending on mode

* fix(walk): do not ignore node_modules

* test(integration): fix golden
2021-09-15 13:42:14 +03:00
Teppei Fukuda
9a4e3b1ffa fix(applier): aggregate packages after merging layers (fanal#277) 2021-09-14 20:20:41 +03:00
Teppei Fukuda
f76c806687 fix(filter): handle the leading slash (fanal#276) 2021-09-14 16:41:07 +03:00
Teppei Fukuda
f21e5919a1 fix(image): do not use pointer for metadata (fanal#273) 2021-09-14 07:53:55 +03:00
Naimuddin Shaik
1dce67f41b feat(image): add image metadata (fanal#227)
* Made below changes
1. To avoid confusion, changed the layer(blobinfo) size to uncompressed size
2. Added v1.configfile as return type of inspect method

Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2021-09-13 23:46:46 +03:00
Teppei Fukuda
8020b0fcfb fix(ruby): add file path (fanal#269) 2021-09-13 17:18:20 +03:00
Teppei Fukuda
fa57fce6c9 fix(filter): hardcode system files in Distroless (fanal#268) 2021-09-13 15:05:29 +03:00
Teppei Fukuda
08e9240efd feat(python): support egg zip (fanal#267) 2021-09-13 15:02:06 +03:00
Teppei Fukuda
41c38375b5 feat(python): support egg format (fanal#266) 2021-09-13 14:14:17 +03:00
Teppei Fukuda
34c3c46056 feat(dpkg): analyze installed files (fanal#265)
* feat(dpkg): analyze installed files

* test(analyzer): fix dpkg version

* test: fix
2021-09-12 20:56:28 +03:00
knqyf263
bb20d89469 feat(apk): analyze installed files (fanal#264) 2021-09-12 20:19:58 +03:00
Teppei Fukuda
62ccd79436 feat(hook): add system file filter (fanal#263) 2021-09-12 14:23:07 +03:00
Teppei Fukuda
1c877da6fd feat(image): revert size (fanal#261) 2021-09-07 13:43:44 +03:00
dependabot[bot]
ff9631b94f chore(deps): bump github.com/open-policy-agent/opa from 0.31.0 to 0.32.0 (fanal#260) 2021-09-07 11:02:28 +03:00
dependabot[bot]
255bbe1477 chore(deps): bump github.com/aws/aws-sdk-go from 1.40.27 to 1.40.37 (fanal#258)
Bumps [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) from 1.40.27 to 1.40.37.
- [Release notes](https://github.com/aws/aws-sdk-go/releases)
- [Changelog](https://github.com/aws/aws-sdk-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go/compare/v1.40.27...v1.40.37)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-09-05 20:31:20 +03:00
Ankush K
6c11c0c5a6 feat(node): add package.json analyzer (fanal#225)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-09-05 20:30:22 +03:00
Ankush K
1ac15af66b feat(ruby): added new gemspec analyzer (fanal#226)
Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-09-05 11:26:55 +03:00
Teppei Fukuda
473fe3a487 feat: add hooks (fanal#254)
* refactor(types): define Empty

* feat: add hooks

* test(integration): fix constructor
2021-08-24 14:26:23 +03:00
dependabot[bot]
b01a7b7207 chore(deps): bump github.com/aws/aws-sdk-go from 1.40.22 to 1.40.27 (fanal#255)
Bumps [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) from 1.40.22 to 1.40.27.
- [Release notes](https://github.com/aws/aws-sdk-go/releases)
- [Changelog](https://github.com/aws/aws-sdk-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go/compare/v1.40.22...v1.40.27)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-24 10:59:23 +03:00
Ankush K
beaf89351c feat(python): add egg and wheel analyzer (fanal#223)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2021-08-19 14:02:24 +03:00
dependabot[bot]
57eafb5545 chore(deps): bump golang.org/x/mod from 0.4.2 to 0.5.0 (fanal#252) 2021-08-15 14:46:57 +03:00
dependabot[bot]
6434945ee2 chore(deps): bump go.uber.org/zap from 1.17.0 to 1.19.0 (fanal#244) 2021-08-15 14:08:30 +03:00
dependabot[bot]
fd1fbf9c54 chore(deps): bump github.com/alicebob/miniredis/v2 from 2.14.1 to 2.15.1 (fanal#246) 2021-08-15 13:20:41 +03:00
dependabot[bot]
1352f0e964 chore(deps): bump github.com/BurntSushi/toml from 0.3.1 to 0.4.1 (fanal#245) 2021-08-15 13:20:13 +03:00
Teppei Fukuda
9a5940cede chore(dependabot): change interval to weekly (fanal#251) 2021-08-15 13:16:12 +03:00
dependabot[bot]
493a383497 chore(deps): bump github.com/aws/aws-sdk-go from 1.40.20 to 1.40.22 (fanal#250)
Bumps [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) from 1.40.20 to 1.40.22.
- [Release notes](https://github.com/aws/aws-sdk-go/releases)
- [Changelog](https://github.com/aws/aws-sdk-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go/compare/v1.40.20...v1.40.22)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-15 12:53:55 +03:00
dependabot[bot]
9763688eca chore(deps): bump github.com/google/go-containerregistry from 0.1.2 to 0.6.0 (fanal#237)
* chore(deps): bump github.com/google/go-containerregistry

Bumps [github.com/google/go-containerregistry](https://github.com/google/go-containerregistry) from 0.1.2 to 0.6.0.
- [Release notes](https://github.com/google/go-containerregistry/releases)
- [Changelog](https://github.com/google/go-containerregistry/blob/main/.goreleaser.yml)
- [Commits](https://github.com/google/go-containerregistry/compare/v0.1.2...v0.6.0)

---
updated-dependencies:
- dependency-name: github.com/google/go-containerregistry
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(deps): bump github.com/google/go-containerregistry

Bumps [github.com/google/go-containerregistry](https://github.com/google/go-containerregistry) from 0.1.2 to 0.6.0.
- [Release notes](https://github.com/google/go-containerregistry/releases)
- [Changelog](https://github.com/google/go-containerregistry/blob/main/.goreleaser.yml)
- [Commits](https://github.com/google/go-containerregistry/compare/v0.1.2...v0.6.0)

---
updated-dependencies:
- dependency-name: github.com/google/go-containerregistry
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

* chore(mod): update testdocker

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2021-08-15 12:52:22 +03:00
Teppei Fukuda
d4855d203c refactor: move lang-specific analzyers to lang dirs (fanal#249)
* refactor: move lang-specific analzyers to lang dirs

* chore(mod): update go-dep-parser
2021-08-15 11:46:44 +03:00
dependabot[bot]
620831145c chore(deps): bump github.com/docker/docker (fanal#240)
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 20.10.7+incompatible to 20.10.8+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Changelog](https://github.com/moby/moby/blob/master/CHANGELOG.md)
- [Commits](https://github.com/docker/docker/compare/v20.10.7...v20.10.8)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-13 17:37:39 +03:00
dependabot[bot]
02c4a51493 chore(deps): bump github.com/go-redis/redis/v8 from 8.4.0 to 8.11.3 (fanal#238)
Bumps [github.com/go-redis/redis/v8](https://github.com/go-redis/redis) from 8.4.0 to 8.11.3.
- [Release notes](https://github.com/go-redis/redis/releases)
- [Changelog](https://github.com/go-redis/redis/blob/master/CHANGELOG.md)
- [Commits](https://github.com/go-redis/redis/compare/v8.4.0...v8.11.3)

---
updated-dependencies:
- dependency-name: github.com/go-redis/redis/v8
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-13 08:42:59 +03:00
dependabot[bot]
fbce2901f9 chore(deps): bump github.com/aws/aws-sdk-go from 1.37.0 to 1.40.20 (fanal#239)
Bumps [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) from 1.37.0 to 1.40.20.
- [Release notes](https://github.com/aws/aws-sdk-go/releases)
- [Changelog](https://github.com/aws/aws-sdk-go/blob/main/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go/compare/v1.37.0...v1.40.20)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-13 07:27:17 +03:00
dependabot[bot]
ba0aeedfe8 chore(deps): bump go.etcd.io/bbolt from 1.3.5 to 1.3.6 (fanal#241)
Bumps [go.etcd.io/bbolt](https://github.com/etcd-io/bbolt) from 1.3.5 to 1.3.6.
- [Release notes](https://github.com/etcd-io/bbolt/releases)
- [Commits](https://github.com/etcd-io/bbolt/compare/v1.3.5...v1.3.6)

---
updated-dependencies:
- dependency-name: go.etcd.io/bbolt
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-12 18:17:21 +03:00
dependabot[bot]
3ec380e500 chore(deps): bump github.com/open-policy-agent/opa from 0.25.2 to 0.31.0 (fanal#234)
Bumps [github.com/open-policy-agent/opa](https://github.com/open-policy-agent/opa) from 0.25.2 to 0.31.0.
- [Release notes](https://github.com/open-policy-agent/opa/releases)
- [Changelog](https://github.com/open-policy-agent/opa/blob/main/CHANGELOG.md)
- [Commits](https://github.com/open-policy-agent/opa/compare/v0.25.2...v0.31.0)

---
updated-dependencies:
- dependency-name: github.com/open-policy-agent/opa
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-12 17:05:20 +03:00
dependabot[bot]
0058bafdee chore(deps): bump github.com/sosedoff/gitkit from 0.2.0 to 0.3.0 (fanal#235)
Bumps [github.com/sosedoff/gitkit](https://github.com/sosedoff/gitkit) from 0.2.0 to 0.3.0.
- [Release notes](https://github.com/sosedoff/gitkit/releases)
- [Commits](https://github.com/sosedoff/gitkit/compare/v0.2.0...v0.3.0)

---
updated-dependencies:
- dependency-name: github.com/sosedoff/gitkit
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2021-08-12 14:40:44 +03:00
dependabot[bot]
940367cf2c chore(deps): bump actions/setup-go from 1 to 2.1.3 (fanal#231)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2021-08-12 14:06:13 +03:00
dependabot[bot]
78845b4767 chore(deps): bump actions/checkout from 1 to 2 (fanal#232)
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
Co-authored-by: Matthieu MOREL <mmorel-35@users.noreply.github.com>
2021-08-12 13:18:58 +03:00
Matthieu MOREL
d55c687c2e chore(ci) : Setup dependabot and fix security issues (fanal#228)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2021-08-12 12:36:00 +03:00
Teppei Fukuda
e749817ebb test(nuget): sort libraries for consistency (fanal#230) 2021-08-12 12:16:16 +03:00
Tauseef
8eb30c2f02 Added a nuget config parser for packages.config (fanal#204)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2021-08-08 15:48:15 +03:00
AndreyLevchenko
0f8ac99dfc feat(python): add support for requirements.txt (fanal#219) 2021-08-05 13:55:20 +03:00
santhosh1729
380c05baee feat(apk): capture license information (fanal#217)
* Capture license information for apk packages

* changed order or license info in package struct

* Remove space replacement with comma for license info
2021-08-02 14:30:32 +03:00
santhosh1729
4ca24d9a6f feat(rpm): capture license (fanal#218)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2021-08-02 11:02:46 +03:00
tonaim
e73d250a1d Layer size (fanal#210)
while doing walk tar, we can get the actual size of layer from tar headers.
2021-07-26 10:36:05 +03:00
AndreyLevchenko
adc7ecc159 feat(data) add eosl flag to OS (fanal#213) 2021-07-22 14:41:16 +03:00
Liam Galvin
81e4ab54dd Update tfsec to v0.46.0 (fanal#208) 2021-07-19 18:19:03 +03:00
AndreyLevchenko
13823326ed fix: disabled scanning of config files within containers (fanal#211) 2021-07-19 17:45:37 +03:00
Teppei Fukuda
c8cfd72cd5 feat(policy): add query and traces (fanal#207)
* feat(policy): add query and traces

* fix tests
2021-07-11 12:01:15 +03:00
Teppei Fukuda
0e8ab4f811 feat(config): add external scanner (fanal#206) 2021-07-10 11:07:53 +03:00
Teppei Fukuda
c0e4e47aba refactor(config): define hcl2 parser (fanal#205) 2021-07-07 22:57:41 +03:00
Teppei Fukuda
9bad4c6cc8 refactor(config): replace parsers (fanal#202) 2021-07-07 14:17:45 +03:00
Teppei Fukuda
8e8274eca7 feat(terraform): support additional metadata (fanal#201) 2021-07-07 11:56:24 +03:00
Teppei Fukuda
797fd0884f feat(config): add additional fields to metadata (fanal#200)
* feat(config): add additional fields to metadata

* feat(config): support multiple links
2021-07-07 11:41:57 +03:00
Teppei Fukuda
5d54332bb0 fix(policy): support empty string from exception rule (fanal#199) 2021-07-05 17:18:50 +03:00
Teppei Fukuda
a922042d2a fix(policy/engine): upper severity (fanal#197) 2021-07-04 16:02:57 +03:00
Teppei Fukuda
c3d5832300 test(config): add sort test (fanal#196) 2021-07-04 11:33:48 +03:00
Teppei Fukuda
959c07688e fix(config/json): skip lock files (fanal#195)
* fix(config/json): skip lock files

* refactor(config/json): use a single extension
2021-07-04 11:24:03 +03:00
Teppei Fukuda
8172518a05 fix(terraform): support severity of passed checks (fanal#194) 2021-07-04 10:32:58 +03:00
Teppei Fukuda
07a11744d5 fix(analyzer): unique analyzers (fanal#192) 2021-07-03 13:04:34 +03:00
Teppei Fukuda
3120d6c3e1 fix(policy/engine): uniq rule names (fanal#191) 2021-06-30 10:32:18 +03:00
Teppei Fukuda
67b7257660 feat(config): support Terraform (fanal#190)
* feat(config): support Terraform

* test(config): add terraform

* refactor: add a comment

* test: fix
2021-06-29 15:43:58 +03:00
Teppei Fukuda
cb66108f4d fix(config): change selector type (fanal#189)
* fix(config): change selector type

* test(policy): fix test data
2021-06-28 14:52:57 +03:00
Teppei Fukuda
ac56d1c24d feat(artifact): add artifact type (fanal#185) 2021-06-28 11:31:54 +03:00
Teppei Fukuda
867eee8499 fix(dockerfile): rename command to stages (fanal#188)
* fix(dockerfile): rename command to stages

* test(docker): fix
2021-06-26 15:56:02 +03:00
Teppei Fukuda
1ab6552f73 test(dockerfile): add multi-stage build (fanal#187)
* test(dockerfile): add multi-stage build

* test(dockerfile): add multi-stage Dockerfile
2021-06-25 17:17:26 +03:00
Tauseef
60c5a04ad1 feat: Support Google artifact registry (fanal#181)
* feat: Support Google artifact registry

This commit adds the capability to scan images from Google artifact
registry(GAR). GAR domains were earlier rejected by Trivy e.g.
europe-west3-docker.pkg.dev etc. With this change, we will treat domain
ending with 'docker.pkg.dev' as GAR domain and use gcloud sdk to fetch
credentials from provided file or credstore.

* refactor: rename GCR to Registry

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-06-02 08:40:43 +03:00
tonaim
2bb882fdec feat(image): add uncompressed layer size (fanal#182)
* Add uncompressed layer size

This commit will help in getting uncompressed layer sizes. Can sum up these layer sizes to get the actual image size

* Removed unnecessary exception

* refactor

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-06-01 17:41:05 +03:00
Teppei Fukuda
a0f5bdc861 fix(image): disable go.sum scanning (fanal#179) 2021-05-20 06:43:23 +03:00
Teppei Fukuda
4a2b1c09d1 fix(gomod): fix a panic (fanal#178) 2021-05-20 05:10:43 +03:00
Teppei Fukuda
6fd4c8951f feat: support config (fanal#166)
Co-authored-by: aprp <doelaudi@gmail.com>
Co-authored-by: rahul2393 <rahulyadavsep92@gmail.com>
2021-05-19 08:05:14 +03:00
rahul2393
b2dd367f8e feat(go): added support of go.sum (fanal#175)
* Added support of go.sum

* Added requested changes

* fix test name

* refactor

* refactor

* feat(main): import gomod

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-05-02 02:50:03 +03:00
rahul2393
7141f20e88 Skipping directory is file is symlink (fanal#176) 2021-05-01 12:30:21 +03:00
Teppei Fukuda
f6a678c60a fix(fs): skip dir (fanal#173)
* fix(fs): skip dir

* test(fs): fix
2021-04-30 07:43:51 +03:00
Masahiro331
3cf1f4c972 feat(golang): support binary (fanal#165)
* feat(GoBinary) support gobinary and add test

* update(modules) update go-dep-parser

* test(gobinary) update test

* fix(library): return nil with empty result

* test(library): add tests

* refactor: group imports

* chore: update .gitignore

* Update README.md

* refactor(gobinary): update an error

* chore(ci): bunp up Go to 1.16

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-04-29 17:21:35 +03:00
Masahiro331
271879331e feat(analyzer): limit the number of parallelism (fanal#172)
* add(AnalyzeFile) add limit for analyze

* fix(AnalyzeFile) limiter define global

* change(AnalyzeFile) up to limit of scan concurrency

* change(Artifact Goroutine) fix limiter

* feat: use semaphore

* refactor: remove unused const

* refactor: wrap errors

* update(go.mod) update go-dep-parser

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-04-28 03:38:30 +03:00
aprp
493a70b45c feat(config): support HCL files (fanal#158)
* feat(config): support HCL1 files

* feat(config): support HCL2 files

* feat(hcl): add Version()

* feat(config): support HCL files

- combine HCL2.0 and HCL1.0 parsing, checking for conformation to HCL2.0
spec first
- checks for HCL1.0 conformation if content does not comply with HCL2.0
spec
- parsing returns an error only if file content does not
comply with BOTH HCL2.0 and HCL1.0

* add Type() test

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2021-03-11 11:09:11 +02:00
Teppei Fukuda
b64a526223 feat(cache): introduce versioned keys (fanal#160)
* feat(analyzer): return analyzer versions as string

* feat(artifact): add version suffix

* fix: revert embedded analyzer versions

* test(cache/fs): update tests

* feat(cache): add common functions

* fix(analyzer): replace string with iota

* fix tests
2021-02-28 10:57:56 +02:00
aprp
1a53cbe31a feat(config): support Dockerfiles (fanal#161)
* feat(config): support Dockerfile

* update namings and add Type() test

* only accepts dockerfile as ext/base name

* simplify dockerfile check

* add test case
2021-02-28 10:19:59 +02:00
aprp
34f865d6e5 feat(config): support JSON files (fanal#159)
* feat(config): support JSON files

* feat(json): add Version()

* fix Type() and add test
2021-02-28 06:14:00 +02:00
aprp
30fc5b97da feat(config): support TOML files (fanal#157)
* feat(config): support TOML files

* feat(toml): add Version()
2021-02-25 17:19:34 +02:00
Teppei Fukuda
059deda653 feat(cache): add analyzer versions (fanal#156)
* feat(cache): add analyzer versions

* feat(artifact): add analyzer versions

* feat(analyzer): add analyzer versions

* feat(analyzer): add Version()

* feat(yaml): add Version()

* fix(analyzer): use consts
2021-02-24 07:25:01 +02:00
Teppei Fukuda
c813a60b6f feat(config): support YAML files (fanal#155)
* feat: add config

* feat(analyzer/config): add yaml analyzer

* chore(mod): update

* chore(ci): bump up Go to 1.15

* test(analyzer/config): add anchors yaml test

* test(analyzer/config): add circular referneces yaml test

* refactor(analyzer/config) change yaml interface

* test(analyzer/config) add multiple yaml test

* chore(analyzer) change comment

Co-authored-by: masahiro331 <mur4m4s4.331@gmail.com>
2021-02-23 07:11:35 +02:00
Teppei Fukuda
907e6be7fd feat(analyzer): disable analyzers (fanal#153)
* feat: add Type()

* feat: pass disabled analyzers

* fix(jar): return type

* fix: pass disable analyzers to constructors

* test: fix integration tests
2021-02-22 13:56:00 +02:00
Teppei Fukuda
4f9e51897e feat(library): support jar/war/ear (fanal#152)
* refactor(library): fix the error message

* feat(analyzer): support jar/war/ear

* feat(main): add jar

* test(jar): add tests

* chore(mod): update go-dep-parser

* fix: change bundler to jar

* chore(mod): update go-dep-parser

* feat(jar): pass file paths

* feat(analyzer): analyze files in parallel

* chore(mod): update go-dep-parser

* fix: sort results

* feat(jar): allow capital extensions
2021-02-14 14:28:59 +02:00
Teppei Fukuda
4a10108d11 feat(image): support Podman (fanal#149)
* refactor(daemon): replace Image with DockerImage

* feat(image): support Podman

* chore(mod): update testdocker
2021-01-19 07:12:30 +02:00
Teppei Fukuda
3f358815c9 refactor(analyzer): pass file paths to analyzers (fanal#150)
* refactor(analyze): pass file path to analyzers

* refactor(library): embed file path

* refactor(library): aligh with new interface

* refactor(os): align with new interface

* refactor(pkg): aligh with new interface

* refactor(analyzer): remove Name()

* Revert "refactor(analyzer): remove Name()"

This reverts commit aaea3808f493a8ae82956ac69880a5f287090408.

* refactor: pass AnalysisTarget
2021-01-11 06:47:04 +02:00
Teppei Fukuda
bac65cb793 feat(image): support RepoTags and RepoDigests (fanal#148)
* refactor(oci): cut out to a separate file

* refactor(archive): cut out to a separate file

* feat(image): define extender

* feat(remote): support RepoTags and RepoDigests

* feat(image): add archiveExtender

* feat(image): add daemonExtender

* feat(daemon): return inspect content

* test(image): add tests for metadata

* chore(mod): update

* feat(image/artifact): return RepoTags and RepoDigests

* chore: remove craft

* chore(mod): add a comment

* feat(remote): add implicitReference

* feat(main): display RepoTags and RepoDigests
2021-01-06 10:33:48 +02:00
Masahiro331
a20d4811d2 add support modularitylabel for rpm (fanal#147) 2020-12-18 07:09:47 +02:00
Teppei Fukuda
7da3f7e57d chore: migrate Travis CI to GitHub Actions (fanal#146) 2020-12-17 16:03:15 +02:00
Teppei Fukuda
42520f3edf chore: migrate from master to main (fanal#145) 2020-12-17 15:47:02 +02:00
Teppei Fukuda
b75c6c4158 feat(cache): support Redis (fanal#143)
* feat(cache): support Redis

* chore(mod): update

* feat(main): support Redis

* test: update error messages according to different errors on GitHub Actions

* feat(redis): add prefix

* fix an error

Co-authored-by: Daniel Pacak <pacak.daniel@gmail.com>

* fix an error

Co-authored-by: Daniel Pacak <pacak.daniel@gmail.com>

* fix(main): defer close

* test(redis): fix error messages

* test(redis): count current connections

Co-authored-by: Daniel Pacak <pacak.daniel@gmail.com>

* test(redis): use structs instead of string literals

Co-authored-by: Daniel Pacak <pacak.daniel@gmail.com>
2020-12-14 15:26:01 +02:00
Teppei Fukuda
da40228e28 fix(rpm): fill source package information (fanal#142)
* fix(rpm): fill source package information

* test(rpm): update expected results

* refactor(rpmcmd): remove a package depending on rpm command

* test(integration): fix import

* refactor(rpm): remove arch and epoch
2020-11-29 10:53:23 +02:00
Teppei Fukuda
91dc954116 feat: remove CGO (fanal#141) 2020-11-23 07:36:33 +02:00
Teppei Fukuda
e17931c273 fix(main): import nuget (fanal#140) 2020-11-23 07:35:46 +02:00
Johannes
8006d76f5d Feat: Created analyzer for NuGet lockfiles. (fanal#139)
* Created analyzer for NuGet.

Signed-off-by: Johannes Tegnér <johannes@jitesoft.com>

* refactor(nuget): sort imports

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2020-10-28 14:29:20 +02:00
Bastian
fde2487249 Close open connections and files (fanal#135)
Ensure that the client and file is closed either in error cases or once cleanup() is called so no file descriptors are leaked.
2020-09-29 13:44:44 +03:00
rahul2393
b62ebec01e Fix: Support local cache of APK index (fanal#133)
* Added support for local APK index file read

* Updated test compare to assert

* refactoring

* Remove unnecessary write header in test
2020-09-01 15:56:02 +03:00
Teppei Fukuda
66b9842ac9 refactor(image): minor changes (fanal#134) 2020-08-31 16:37:39 +03:00
Shivam Mishra
fa1f12776b Support for scanning of an OCI image given a tag. (fanal#130)
Condition:- Specify an image name and tag ":" separated.
If correct image name and tag is specified ":" separated, image with given tag will be return otherwise first one will be return
2020-08-30 15:56:55 +03:00
Teppei Fukuda
3f64bd6b32 fix(alpine): add origin package as source package (fanal#131)
* fix(alpine): add an origin package as a source package

* test(integration): add -update flag

* test(integration): update golden files
2020-08-20 10:46:32 +03:00
Teppei Fukuda
c875ba5942 Revert "Added skip_dir in image artifacts scan (fanal#128)" (fanal#129)
This reverts commit 94c68283e7.
2020-08-13 23:47:49 +03:00
rahul2393
0bd417531d Added skip_dir in image artifacts scan (fanal#128)
* Added skip_dir in image artifact scan

* Updated walker as per suggestions

* Fixed factory method

* refactor(image): revert skipDirectories in artifact

* feat: add InspectOption

* test(walker): add tests for skipDirectories

* test(walker): add tests for skipDirectories

* test(fs): add tests

* test(image): add tests

* test(integration): fix

* feat(main): add --skip-directories

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2020-08-11 09:20:37 +03:00
rahul2393
80595dc426 Check status for dpkg package (fanal#127)
* Check status for dpkg package

* by default package is installed if status is not present

* Fixed test file

* Updated check
2020-07-15 15:26:54 +03:00
Teppei Fukuda
ceb4e47ef1 fix(apk): replace go-deb-version with go-apk-version (fanal#118)
* fix(apk): replace go-deb-version with go-apk-version

* chore(mod): update dependencies

* chore(mod): update go-apk-version
2020-06-24 21:02:56 +03:00
Oran Moshai
4025117c23 Merge pull request fanal#122 from oranmoshai/fix/s3-head
fix(s3/cache): HeadObject bucketName was missing.
2020-06-15 12:18:07 +03:00
oranmoshai
d56c477e5f fix(s3/cache): HeadObject bucketName was missing.
Add unit testing
2020-06-14 10:06:03 +03:00
Oran Moshai
717f36c819 Fix/s3 cache (fanal#121)
* fix: Due read after write consistency in S3 missingLayers called the actual object that created cache 403 response
This change creating index file for each object so missingLayers will not hit object that not exist.

* fix comments error description

Co-authored-by: oranmoshai <oran.moshai@aquasec.com>
2020-06-10 15:10:41 +03:00
Teppei Fukuda
e8d06ba336 fix(cache/s3): take s3 client and prefix as args (fanal#116)
* fix(cache): revert options

* fix(cache/s3): take a s3 client as the argument

* test(cache): update mocks

* test(cache/s3): fix tests
2020-06-01 19:22:42 +03:00
Teppei Fukuda
81390970cd feat(cache): support options to pass S3 prefix (fanal#115)
* feat(cache): support options

* refactor(cache/s3): avoid overwriting session

* refactor(cache/s3): replace image and layer with artifact and blob

* fix(cache/s3): check if S3Cache implements Cache

* refactor(cache): move FSCache to a dedicated file

* test(cache): update mocks

* test(cache/s3): fix tests
2020-05-31 11:52:39 +03:00
Teppei Fukuda
4c77b76406 feat: support local filesystem and remote git repository (fanal#107)
* test(integration): move to the test directory

* chore: update fixtures path

* test: put common test images under the test directory

* chore(Makefile): rename

* feat: support local filesystem and remote git repository [PART 1] (fanal#109)

* feat(walker): add tar/fs walker

* fs_test: Add test names

Signed-off-by: Simarpreet Singh <simar@linux.com>

* walk_test: Add Test_isIgnored

Signed-off-by: Simarpreet Singh <simar@linux.com>

* feat: support local filesystem and remote git repository [PART 2] (fanal#110)

* refactor(analyzer): merge OSAnalyzer, PkgAnalyze, LibAnalyzer into
Analyzer

* test: comment out temporarily

* fix(amazon): check the length

* fix(analyzer): make AnalysisResult a reference

* library/analyzer: Refactor library analyzer code.

Signed-off-by: Simarpreet Singh <simar@linux.com>

* feat: support local filesystem and remote git repository [PART 3] (fanal#111)

* refactor(image): move directory

* feat(applier): add applier

* fix(apk): replace extractor with applier

* test: comment out temporarily

* feat: support local filesystem and remote git repository [PART 4] (fanal#112)

* feat(artifact): add image, local and remote artifact

* image_test: Rename test field to use new convention

Signed-off-by: Simarpreet Singh <simar@linux.com>

* image_test: Add a test for put artifact failure

Signed-off-by: Simarpreet Singh <simar@linux.com>

* refactor(remote): remove unnecessary files for unit test

* feat: support local filesystem and remote git repository [PART 5] (fanal#113)

* test(integration): fix tests

* feat: support local filesystem and remote git repository [PART 6] (fanal#114)

* feat(main): add sub commands

* refactor(types): remove unused type

* chore(mod): update

* test(artifact): add mock

* fix(analyzer): redhat must be replaced with oracle

* fix(analyzer): debian must be replaced with ubuntu

* fix(fs): display dir when hostname is empty

Co-authored-by: Simarpreet Singh <simar@linux.com>

Co-authored-by: Simarpreet Singh <simar@linux.com>

* fix: make AnalysisResult a reference

Co-authored-by: Simarpreet Singh <simar@linux.com>

* refactor(walker): fix comment

Co-authored-by: Simarpreet Singh <simar@linux.com>

Co-authored-by: Simarpreet Singh <simar@linux.com>

Co-authored-by: Simarpreet Singh <simar@linux.com>
2020-05-28 23:29:07 +03:00
Teppei Fukuda
a1e818ac5e refactor(cache): replace image and layer with artifact and blob (fanal#108)
* refactor(cache): replace image and layer with artifact and blob

* fix(cache): replace S3
2020-05-21 10:51:29 +03:00
Oran Moshai
81526ed0d9 Add S3 support for layer caching this will allow to save image result… (fanal#106)
* Add S3 support for layer caching this will allow to save image results on managed persistent object store

* Working on PR comments

Co-authored-by: oranmoshai <oran.moshai@aquasec.com>
2020-05-17 15:53:16 +03:00
Teppei Fukuda
83ff3fda25 feat(cache): add close function (fanal#104)
* feat(cache): add close function

* test(mock): update mock

* test(analyzer): fix tests according to updated mock
2020-05-05 10:45:51 +03:00
Simarpreet Singh
aa4339ca41 analyzer: Send back package and apps info for unknown OS if found. (fanal#103)
* analyzer: Send back package and apps info for unknown OS if found.

We should send back package and apps info if found even
in the case of an unknown OS. Example Dockerfile:

```
$ cat Dockerfile
FROM hello-world

ADD https://raw.githubusercontent.com/aquasecurity/trivy-ci-test/master/Cargo.lock .
```

Should say ErrUnknownOS but still scan the Cargo vulns.

Signed-off-by: Simarpreet Singh <simar@linux.com>

* fix(analyzer): send back package and apps info even if there is no package found

* fix(main): handle specific errors

Co-authored-by: knqyf263 <knqyf263@gmail.com>
2020-04-27 15:16:47 -07:00
Teppei Fukuda
b22aebf826 feat(image): support registry token (fanal#102)
* feat(image): support registry token

* test: assert error messages

* chore(mod): point to the latest testdocker
2020-04-27 21:47:28 +03:00
Teppei Fukuda
364cc862f7 feat(image): support OCI Image Format (fanal#101)
* feat(image): support OCI Image Format

* refactor: rename NewDockerArchiveImage to NewArchiveImage

* test: rename TestNewDockerArchiveImage to TestNewArchiveImage

* fix: introduce go-multierror

* image: add more sad paths for tryOCI func

Signed-off-by: Simarpreet Singh <simar@linux.com>

* test(image): add more test case

Co-authored-by: Simarpreet Singh <simar@linux.com>
2020-04-26 13:13:28 +03:00
Teppei Fukuda
05ea7f4201 fix: replace containers/image with google/go-containerregistry (fanal#96)
* fix(image): replace containers/image with google/go-containerregistry

* test(image): remove un-needed mocks

* fix(option): add NonSSL

* fix(docker): replace containers/image with google/go-containerregistry

* test(docker): add testing servers for Docker Registry/Engine

* refactor(extractor): replace digesst.Digest with string

* fix(analyzer): replace containers/image with google/go-containerregistry

* fix(main): remove cleanup function

* chore(actions): add apt-get update

* chore(Makefile): remove unnecessary tag

* test(integration): remove cleanup function

* test(integration): specify API version

* test(bench): remove cleanup function

* test(bench): remove some cases

* test: separate testutils into another repository

* feat: implement the original struct to communicate with Docker Engine

* fix(image): use daemon.Image

* fix(docker): use diff_id instead of digest

* fix(cache): use diff_id as a key of cache

* fix(analyzer): use diff_id

* fix(main): add cleanup

* test(testdata): cleanup

* test(benchmark): measure the cost of initializing structs

* chore(mod): update dependencies

* test(integration): add cleanup

* test(integration): negotiate API version

* chore(actions): remove exit

* chore(mod): remove replace

* fix(extractor): revert removing structs

* test: add testdata

* fix: skip calculating the hash of a compressed layer when analyzing an uncompressed layer

* test(image): remove code

* refactor(image/daemon): remove cruft

* test(integration): implement docker login/logout

* test(integration): change expectation

* refactor(cache): rename layerID to diffID

* test(cache): add sad path in GetLayer

* test(analyzer): renmae LayerID to DiffID

* chore(image): add a comment

* fix(image/daemon): return empty func() instead of nil

* fix(image/daemon): add a comment

* fix(image/daemon): add a comment

* refactor(image/daemon): use client.WithAPIVersionNegotiation

* refactor(analyzer): rename LayerIDs to DiffIDs

* refactor(analyzer): remove an un-needed arg

* refactor(cache): wrap an error

* refactor(main): format

* refactor(docker): reorder imports

* refactor(docker): change the order

* chore: add the comment

* refactor(extractor): rename

* refactor(image/daemon): wrap errors

* chore(image/daemon): add a comment

* refactor(image): remove unnecessary definitions

* refactor(integration): use client.WithAPIVersionNegotiation
2020-04-13 21:21:39 +03:00
Huang Huang
8b3289c880 Support settings apkIndexArchiveURL via env FANAL_APK_INDEX_ARCHIVE_URL (fanal#94) 2020-04-13 11:55:51 +03:00
Teppei Fukuda
fc2f5ddbb2 test(integration): add tests with TLS registry (fanal#99)
* test(integration): add tests with TLS registry

* test(integration): add the build tag

* test(registry): aggregate imports

* test(registry): remove un-needed expectations
2020-04-06 19:25:43 +03:00
Teppei Fukuda
21e1ebf92c fix(bench): measure initializing structs (fanal#98)
* fix(bench): remove some cases

* fix(bench): measure initializing Analyzer

* chore(ci): force benchmark tests to pass
2020-04-05 16:53:27 +03:00
Teppei Fukuda
bf63cc7f34 feat: split ID into Digest and DiffID (fanal#97) 2020-03-24 20:34:42 +02:00
Teppei Fukuda
5d7149d6cf feat(extractor): switch to layer ID of origin layer (fanal#93)
* feat(extractor): switch to layer ID of origin layer

* integration: update golden file for vuln-image

This file was updated during a COVID-19 crisis.

Signed-off-by: Simarpreet Singh <simar@linux.com>

* test(docker): sort applications

* test(docker): fix order

Co-authored-by: Simarpreet Singh <simar@linux.com>
2020-03-17 20:10:56 +02:00
Simarpreet Singh
c63e3aa5d5 integration: Add dockerless mode tests (fanal#81)
* integration: Add dockerless mode tests

Signed-off-by: Simarpreet Singh <simar@linux.com>

* .github: Fix typo

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Improve cache assertions with containers/image

Signed-off-by: Simarpreet Singh <simar@linux.com>

* github: Update docker version before running

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Remove un-needed random num generation

Signed-off-by: Simarpreet Singh <simar@linux.com>

* rebase on latest master

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: improve packages check

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Remove un-needed goldenfiles

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Rename dockerlessImageName to remoteImageName

Signed-off-by: Simarpreet Singh <simar@linux.com>

* github: Remove un-needed bench target

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Rename dockerlessImageName to remoteImageName

Signed-off-by: Simarpreet Singh <simar@linux.com>
2020-03-15 11:35:17 +02:00
Liz Rice
3ac504288d Change license to Apache 2.0 (fanal#92)
* Change license to Apache 2.0

* Change license to Apache 2.0, continued
2020-03-13 10:22:25 +00:00
Daniel Pacak
016f45e8d3 fix: Move check for rpm command to the parsePkgInfo method (fanal#90)
Signed-off-by: Daniel Pacak <pacak.daniel@gmail.com>
2020-03-06 14:29:36 +02:00
Teppei Fukuda
45ada28e38 fix(token): use the credential from enviroment variable (fanal#89) 2020-03-06 11:32:50 +02:00
Simarpreet Singh
b0937b624b Add layer id info (merge to master) (fanal#88)
* analyzer: Include layerID as part of LayerInfo

Signed-off-by: Simarpreet Singh <simar@linux.com>

* Add LayerID to Package struct

Signed-off-by: Simarpreet Singh <simar@linux.com>

* analyzer: Remove ID from returned layerInfo

Signed-off-by: Simarpreet Singh <simar@linux.com>

* analyzer: Handle missing layer.ID from cached layer

Signed-off-by: Simarpreet Singh <simar@linux.com>

* extractor/docker: Cleanup logic to avoid extra slice usage

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Fix golden files to include LayerID

Signed-off-by: Simarpreet Singh <simar@linux.com>

* analyzer: Remove condition for adding layer.ID

Signed-off-by: Simarpreet Singh <simar@linux.com>

* types: Introduce types.LibraryInfo

Signed-off-by: Simarpreet Singh <simar@linux.com>

* docker: Add LayerID to each LibraryInfo

Signed-off-by: Simarpreet Singh <simar@linux.com>

* .github/bench: Bump up docker version

Signed-off-by: Simarpreet Singh <simar@linux.com>

* intergration/perf: Remove other OSes for the timebeing.

Looks like Github CI is running out of space while running
other tests. Until we find a better solution we need to comment
out bigger OSes.

Signed-off-by: Simarpreet Singh <simar@linux.com>

* fix(image): call Close() via cleanup funcion

* refactor(type): add omitempty

* analyzer: Change to types.LibraryInfo in analzyer.go

Signed-off-by: Simarpreet Singh <simar@linux.com>

* wip: add CleanupDockerExtractorFn for cleanup

Signed-off-by: Simarpreet Singh <simar@linux.com>

* refactor(analyzer): remove un-needed function

* test(cache): comment in

* Revert "wip: add CleanupDockerExtractorFn for cleanup"

This reverts commit dabfae104bf6d63492823c6c3eb94175d26eabad.

* Revert ".github/bench: Bump up docker version"

This reverts commit b982c46861e1cc0851d53621c0e68ac40918d755.

* refactor(analyzer): sort imports

* test(cache): remove debug code

* test(cache): format

* chore(image): remove debug code

Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2020-03-04 08:25:19 -08:00
Teppei Fukuda
bfa6e76141 feat(cache): based on JSON (fanal#84)
* temp

* update

* fix integration test

* update

* update

* test(docker): add a test for ExtractLayerFiles

* docker_test: Add opq and wh file paths.

Signed-off-by: Simarpreet Singh <simar@linux.com>

* docker_test: Add sad path for GetLayer

Signed-off-by: Simarpreet Singh <simar@linux.com>

* docker_test: Add invalid file for extractFiles

Signed-off-by: Simarpreet Singh <simar@linux.com>

* docker_test: remove old crufty tests

Signed-off-by: Simarpreet Singh <simar@linux.com>

* docker_test: Add tests for ApplyLayers

Signed-off-by: Simarpreet Singh <simar@linux.com>

* test(docker): add tests for status.d

* test(docker): no mock

* temp

* analyze_test: Add tests for Analzye() happy path

Signed-off-by: Simarpreet Singh <simar@linux.com>

* cache: remove mock_cache.go

Signed-off-by: Simarpreet Singh <simar@linux.com>

* analyzer_test: Prefer real extractor over mock

Signed-off-by: Simarpreet Singh <simar@linux.com>

* analyzer_test: Add sad paths for Analyze

Signed-off-by: Simarpreet Singh <simar@linux.com>

* tests: Fix invocation call sites for new JSON cache

Signed-off-by: Simarpreet Singh <simar@linux.com>

* test(image): add httptest server

* utils_test: Add build tags

Signed-off-by: Simarpreet Singh <simar@linux.com>

* test(analyzer): add sad path

* test(image): remove unused tests

* test(integration): fix interface

* test(analyzer): add an image including lock files

* refactor(analyzer): remove the unused function

* test(analyzer): add tests for Applier

* test(cache): add cache tests

* feat(cache): support schema version

* refactor(mock): remove unnecessary mocks

* refactor: clean up debug code

* test(analyzer): add a test image

* test(bench): fix cache

* cache_test: Add a layer with SchemaVersion of 2

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: remove cruft

Signed-off-by: Simarpreet Singh <simar@linux.com>

* feat(image): support docker host and cert path

* refactor(image): add omitempty

* feat(image): add new struct to have image information in cache

* feat(cache): add image bucket

* refactor(cache): commonize getting layer

* test(mock): generate new mocks

* feat(analyzer): analyze image config and store it in cache

* refactor(analyzer): make errors lowercase

* test(cache): update tests

* test(analyzer): fix tests

* fix(cmd): pass image ID

* fix(analyzer): add HistoryPackages to store package from history

* fix(cache): return an error in GetLayer

* refactor(cache): rename ImageConfig to ImageInfo

* refactor(err): wrap errors

Co-authored-by: Simarpreet Singh <simar@linux.com>
2020-02-27 21:09:05 +02:00
Masahiro Fujimura
f0dc9fa748 Change library parse error log (fanal#85)
Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2020-02-17 22:13:04 +02:00
Teppei Fukuda
412209b0d1 test(bench): exclude master branch in GitHub Actions (fanal#82) 2020-02-17 21:04:31 +02:00
Teppei Fukuda
3d55fc5ea6 test(integration/bench): wait for an image load and remove images after tests (fanal#86)
* bench: remove images after finishing benchmarks

* test(integration): remove images after finishing tests

* test(bench): merge master branch

* debug

* chore(Makefile): exclude all tests when running benchmarks

* test(bench): wait for an image load

* fix(image): close source

* test(integration): wait for an image load

* test(bench): clean up debug code
2020-02-17 20:02:22 +02:00
Teppei Fukuda
495332ccd1 refactor: replace genuinetools/reg with containers/image (fanal#70)
* chore(ci): remove unused lines

* feat(cache): add SetBytes

* refactor(cache): replace Initialize with New

* fix(cache): use ReadCloser instead of Reader

* fix(option): update options according to containers/image

* feat(image): add struct to manipulate an image

* refactor(token): move the directory

* chore(Makefile): fix test

* chore(Makefile): add containers_image_storage_stub tag

* refactor(docker): use Image

* refactor(docker): remove unused functions

* refactor(docker): update imports

* test(docker): fix tests

* refactor(analyer): use containers/image

* chore(mod): update dependencies

* fix(extractor): update interface

* fix(main): use updated functions

* test(integration): fix

* refactor(image): remove unused definition

* refactor(error): wrap errors

* test(image): add TestNewImage

* test(mock): prepare interfaces

* test(mock): generate mocks

* test(image): add TestImage_LayerInfos

* test(image): add TestImage_ConfigBlob

* test(image): add TestImage_GetBlob

* chore(mod): update dependencies

* refactor(error): wrap errors

* fix(auth): pass nil when auth is empty

* chore(Makefile): add a tag

* test(bench): fix

* chore(bench): introduce cob

* chore(ci): restrict a push trigger

* chore(bench): run benchmarks 10 times

* test(bench): use a random tag

* test(integration): remove ImageRemove

* chore(cob): set threshold to 0.7

* image_test: Add unhappy paths for GetBlob

Signed-off-by: Simarpreet Singh <simar@linux.com>

* refactor(image): remove unused fuction

* fix(image): close io.ReadCloser via cleanup function

* test(image): do not skip populateSource

Co-authored-by: Simarpreet Singh <simar@linux.com>
2020-01-29 13:37:32 +02:00
Simarpreet Singh
285e1f1bbf integration: Fix filenames to not include the : char (fanal#79)
Signed-off-by: Simarpreet Singh <simar@linux.com>
2020-01-24 11:45:49 -08:00
Simarpreet Singh
d3979a0d1f Perf testing (fanal#72)
* integration: Add a test to use fanal as a library

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Table driven library_tests

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Add even more OSes to the docker mode test

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: run tests in parallel

Signed-off-by: Simarpreet Singh <simar@linux.com>

* .git: Update gitignore with trivy images dir

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: add golden files for packages

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Run all tests in parallel

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Refactor check logic to run twice.

Once for no cache, once with cache.

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Fix cache invocation

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Add a more comprehensive image for library_test

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Introduce anon struct type

Signed-off-by: Simarpreet Singh <simar@linux.com>

* travis: add make test-integration

Signed-off-by: Simarpreet Singh <simar@linux.com>

* travis: Upgrade docker version

Signed-off-by: Simarpreet Singh <simar@linux.com>

* benchmark: Add benchmark tests

Signed-off-by: Simarpreet Singh <simar@linux.com>

* removeme: Add deliberate sleep

Signed-off-by: Simarpreet Singh <simar@linux.com>

* remove sleep

Signed-off-by: Simarpreet Singh <simar@linux.com>

* travis: Add cob to travis

Signed-off-by: Simarpreet Singh <simar@linux.com>

* chore(bench): use GitHub Actions

* chore(bench): use GitHub Actions

* chore(bench): install make

* chore(bench): use GitHub Actions

* chore(ci): move unit tests to GitHub Actions

* benchmark_test: Remove assertions and goroutines

Signed-off-by: Simarpreet Singh <simar@linux.com>

* benchmark_test: Split with and without cache

Signed-off-by: Simarpreet Singh <simar@linux.com>

* benchamark_test: Add missing assertions, remove cruft

Signed-off-by: Simarpreet Singh <simar@linux.com>

* benchmark_test: Make tests indepedent of each other.

Signed-off-by: Simarpreet Singh <simar@linux.com>

* benchmark_test: Refactor teardown

Signed-off-by: Simarpreet Singh <simar@linux.com>

* benchmark_test: Clear cache per run for Without Cache

Signed-off-by: Simarpreet Singh <simar@linux.com>

Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2020-01-22 13:51:25 -08:00
Simarpreet Singh
c87f30c25e integration: Fanal as a library for tar mode (fanal#76)
* rename library_test > library_dockermode_test

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Introduce fanal as a library for tar mode tests.

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Refactor tar and dockermode together

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: DRY check funcs

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Refactor signatures

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Remove removal of images for tar mode

Signed-off-by: Simarpreet Singh <simar@linux.com>
2020-01-22 11:55:51 -08:00
Simarpreet Singh
d328815939 integration: Add a test to use fanal as a library in Docker mode (fanal#66)
* integration: Add a test to use fanal as a library

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Table driven library_tests

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Add even more OSes to the docker mode test

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: run tests in parallel

Signed-off-by: Simarpreet Singh <simar@linux.com>

* .git: Update gitignore with trivy images dir

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: add golden files for packages

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Run all tests in parallel

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Refactor check logic to run twice.

Once for no cache, once with cache.

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Fix cache invocation

Signed-off-by: Simarpreet Singh <simar@linux.com>

* integration: Add a more comprehensive image for library_test

Signed-off-by: Simarpreet Singh <simar@linux.com>

* library_test: Introduce anon struct type

Signed-off-by: Simarpreet Singh <simar@linux.com>

* travis: add make test-integration

Signed-off-by: Simarpreet Singh <simar@linux.com>

* travis: Upgrade docker version

Signed-off-by: Simarpreet Singh <simar@linux.com>
2020-01-17 10:49:50 -08:00
Masahiro Fujimura
ca5843cec2 Fix circular dependency for alpine apk index. (fanal#68)
* Fix Alpine Apk index resolve dependency, apkIndex has circular dependency package

* Add nodejs test

* Fix review

* Fix pointer
2020-01-12 16:40:21 +02:00
Simarpreet Singh
1d57f7be5c Revert PR fanal#51 entirely (fanal#67)
* Revert "Revert part of fanal#51 (fanal#64)"

This reverts commit a3284d4a2d.

* revert: PR fanal#51 for cache

Signed-off-by: Simarpreet Singh <simar@linux.com>
2020-01-10 11:58:23 -08:00
Masahiro Fujimura
68eb4c6c8d Revert part of fanal#51 (fanal#64)
* Fix getFilteredTarballBuffer function

* Add dotfilepath tar.gz

* Add dot filepath test

* fix test name

* change test filename

* Add empty files

* fix(docker): remove getFilteredTarballBuffer

* test(docker): remove tests for TestDocker_ExtractLayerWorker

* test(docker): remove unused files

Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2020-01-05 22:39:22 +02:00
Teppei Fukuda
eaf9fa5e3f feat(cache): wrap kv cache (fanal#62) 2019-12-25 13:57:07 +02:00
Tomoya Amachi
60a7565870 add aws session token (fanal#61) 2019-12-25 13:56:15 +02:00
Masahiro Fujimura
78df35b570 Add photon support (fanal#59)
* Add photon support

* fix(suse): add continue

* refactor(photon): remove unnecessary end index

Co-authored-by: Teppei Fukuda <knqyf263@gmail.com>
2019-12-24 14:14:51 +02:00
Simarpreet Singh
162fb42d62 Merge pull request fanal#57 from aquasecurity/switch-to-raw-encoding
cache: Switch to Raw encoding.
2019-12-16 22:46:57 +08:00
Simarpreet Singh
7d0165c767 cache: Switch to Raw encoding.
This commit also switches zstd to use SpeedDefault.

Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-12-16 00:34:45 -08:00
Teppei Fukuda
7ef1e5f970 Cache: Save only required files (fanal#51) 2019-12-16 08:44:43 +02:00
Teppei Fukuda
94f9cf49fb Add suse linux enterprise server support (fanal#55)
* Add suse linux enterprise server

* Fix comment

* Add openSUSE Tumbleweed support
2019-12-15 14:53:51 +02:00
masahiro331
bed0a0ebd1 Add openSUSE Tumbleweed support 2019-12-07 17:01:14 +09:00
masahiro331
0c254184d6 Fix comment 2019-12-07 15:22:41 +09:00
masahiro331
306c551fdf Add suse 2019-12-07 13:54:35 +09:00
Simarpreet Singh
9c6b9a69c3 analyzer: Add tests for AnalyzeFile
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-12-04 20:41:28 -08:00
Samuel Archambault
2cb920d5d9 Using bufio reader for Stdin, otherwise the first 3 bytes are consumed and file gets "corrupted" (stdin is not seekable?) 2019-12-04 20:41:28 -08:00
Teppei Fukuda
9bf16ae1ba Revert "change mod genuinetools/reg to vanilla (fanal#50)" (fanal#53)
This reverts commit ad03c4f38c.
2019-12-02 14:48:03 +02:00
Simarpreet Singh
3867fc71ee cmd: Rebase on master and add SkipPing=true
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
3348a0669e analyzer_test: Remove un-needed assertions
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
030687c989 analyzer: Rename struct
As per: https://github.com/golang/go/wiki/CodeReviewCommentsfanal#package-names

Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
a273649227 docker_test: Fix import order
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
e6a79f7bc7 docker: Accept interfaces, return structs
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
2c08d9d3dc cmd: Fix import lines
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
673fc374ed analyzer_test: Reduce cruft.
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
511e061c0c docker_test: Add a sample testdir.tar.gz
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
55e97e97ce docker: Fix signature for downloadConfigFile()
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
aac55275bb docker: Fix getValidManifest() signature
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
9aea551d86 analyzer: Remove cruft.
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
72334df0c5 docker: extract downloadConfigFile
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
72e5ec702d docker: Extract extractLayerFiles
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
971269bac8 docker: Extract extractLayerWorker()
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
98341f1e9e docker_test: refactor getValidManifest
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
1e66346f29 docker_test: Add sad paths for Extract()
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
e41cf57454 docker_test: Add a happy path for Extract()
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
3813f90496 gitignore: update gitignore
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
24c612e166 cache: Define an interface for cache, remove global state
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
d993110d96 analyzer_test: Fix tests by fighting with global state
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
e4b1b64788 docker: Inject docker client
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
a1ea9aeeeb main: Update example of how to use fanal
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
3aca6b2d6a analyzer: Add another happy path with no docker and/or image
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
a183360e76 analyzer_test: switch to table driven
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
7eb94404a3 analzyer_test: Add stronger assertions for extractFromFile
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
Simarpreet Singh
985442dc1c analyzer_test: Adding seams for testability
Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-27 09:32:37 -08:00
jabielecki
95e89a424e change mod genuinetools/reg to vanilla (fanal#50)
* change mod genuinetools/reg to vanilla

Instead of using tomoyamachi's fork we can now use the vanilla upstream
package genuinetools/reg. This package gets better maintenance.

Also introducing new checksums for reg's children/dependecies.

Signed-off-by: Jakub Bielecki <jakub.bielecki@codilime.com>

* go mod tidy
2019-11-26 08:49:05 +02:00
jabielecki
728ba00be5 fix docker reg with option SkipPing (fanal#48)
Workaround for a deficient Ping implementation of reg package.
Ping fails on docker registries that return http 401
Authentication Required when requesting general /v2 url, but
happily allow unauthenticated pull of a specific image.

Closes aquasecurity/trivyfanal#229

Signed-off-by: Jakub Bielecki <jakub.bielecki@codilime.com>
2019-11-24 09:30:22 +02:00
Simarpreet Singh
177a2b0ad9 Add cache tests (fanal#46)
* docker_test: Do not pass nil context

Ref: https://github.com/golang/go/blob/master/src/context/context.gofanal#L37:L38

Instead pass context.TODO()

Signed-off-by: Simarpreet Singh <simar@linux.com>

* cache_test: Add happy path for Get() and Set()

Signed-off-by: Simarpreet Singh <simar@linux.com>

* cache_test: Add happy path for clear

Signed-off-by: Simarpreet Singh <simar@linux.com>

* main: Rename os -> osFound to avoid shadowing

Signed-off-by: Simarpreet Singh <simar@linux.com>

* cache_test: Assert that cache is indeed cleared up.

Signed-off-by: Simarpreet Singh <simar@linux.com>
2019-11-19 10:07:12 +02:00
Teppei Fukuda
f9907823b8 Update LICENSE (fanal#45) 2019-11-04 11:58:41 +00:00
Teppei Fukuda
cf9d00dfc2 feat(library): ignore files under vendor dir (fanal#44) 2019-10-31 12:25:12 +02:00
Teppei Fukuda
9e8f0bb4f0 feat(image): support tar.gz image (fanal#40) 2019-10-15 11:48:52 +03:00
Nikita Titov
83f0e2b08b added markup and reference for code snippet in README (fanal#41) 2019-10-15 08:56:39 +03:00
R0GG
b318dec1e0 extractor/docker/docker.go: add parsing for tar.gz layers (fanal#26)
* extractor/docker/docker.go: add parsing for tar.gz layers

* extractor/docker/docker.go: ExtractFromFile: add new parsing logic

* extractor/docker/docker_test.go: add tarball with tar.gz layers

* Apply review
2019-10-01 00:41:48 +03:00
Teppei Fukuda
3841cf6d94 Check whether rpm is installed (fanal#39)
* Check whether rpm is installed

* Apply the review
2019-09-25 17:02:27 +03:00
Teppei Fukuda
cdeb41a58c Fix wrong break (fanal#38) 2019-09-25 15:52:46 +03:00
Teppei Fukuda
4a9f3d9aa9 Bug fix: wrap nil err (fanal#37) 2019-09-25 14:11:35 +03:00
Teppei Fukuda
d5d2729237 Add error wrap (fanal#35)
* Add error wrap

* Fix bug

* Fix typo
2019-09-25 12:57:09 +03:00
Teppei Fukuda
a5ed21ec13 Update Go to 1.13 (fanal#36) 2019-09-25 12:05:54 +03:00
Tomoya Amachi
afcb70977c extract all files in target require filedirs (fanal#29)
* extract all files in target require filedirs

* use separator to string

* change dpkg file match algorithm

* use filepath.Clean

* add test for target dir files
2019-09-25 09:35:58 +03:00
Masahiro Fujimura
c9f8a8546e Change error log (fanal#32) 2019-09-25 09:33:36 +03:00
Tomoya Amachi
f9a8f80485 skip scan composer.lock in vendor dir (fanal#34) 2019-09-25 09:32:02 +03:00
Teppei Fukuda
a8380ab5e5 Transfer repositoriy (fanal#27)
* Transfer repositoriy

* Disable coverall temporarily
2019-08-19 09:15:12 +01:00
Tomoya Amachi
430740f537 change reg version (fanal#25) 2019-07-07 02:51:50 +09:00
Andrew Hamilton
cef12efc04 Improves package analysis errors usability (fanal#24)
- Adds a new analyzer error for "no packages detected"
- Package analyzers now return the common "no packages detected" error
- Returned errors from the package analyzers are checked against the
  common "no packages detected" errors and filters those out. Other
  errors will now be passed back to the user for debugging.
2019-07-02 11:42:31 +09:00
Tomoya Amachi
3a38594cd1 to be able add required files (fanal#22)
* to be able add required files

* fix typo
2019-05-28 13:25:47 +09:00
Tomoya Amachi
6c02a38295 add Arch for amazon linux scan (fanal#21) 2019-05-23 09:27:21 +09:00
Masahiro
4e0c7fc226 Add poetry parser (fanal#19) 2019-05-22 00:46:31 +09:00
Tomoya Amachi
dd938fd693 update go-dep-parser for yarn bugfix (fanal#18) 2019-05-22 00:13:59 +09:00
Naoki Harima
e41f180236 Use go-deb-version for version validation (fanal#17) 2019-05-17 18:06:27 +09:00
Tomoya Amachi
b7debf7f0a add yarn.lock parser (fanal#16)
* add yarn.lock parser

* skip analyze package files in dependency folder
2019-05-16 09:29:14 +09:00
Teppei Fukuda
ce1f557cf7 Include source package in the package struct (fanal#15)
* Include source package in package struct

* Use SOURCERPM

* Use epoch of bin package as epoch of src package
2019-05-14 14:28:04 +09:00
Teppei Fukuda
9fa86c550a Replace slash with underscore (fanal#14) 2019-05-13 15:12:10 +09:00
Teppei Fukuda
89f6348b9c Analyze origin (fanal#13) 2019-05-13 03:56:15 +09:00
Teppei Fukuda
faed25bfec Analyze command (fanal#12)
* Extract commands

* Analyze commands

* Add comment

* Resolve dependency
2019-05-12 11:18:34 +09:00
Masahiro
856dd3a464 Add cargo analyzer (fanal#11) 2019-05-11 17:35:00 +09:00
Tomoya Amachi
cb5b791d13 GetToken only run extractor/docker (fanal#10)
* GetToken only run extractor/docker

* delete dockerhub register analyzer

* create types package
2019-05-09 13:39:17 +09:00
Tomoya AMACHI
1211b105dc add ecr test 2019-05-09 13:33:11 +09:00
Tomoya AMACHI
e9e2777c32 add gcr test 2019-05-09 12:58:12 +09:00
Tomoya AMACHI
123ee18257 fix reviewed point 2019-05-09 12:27:18 +09:00
Tomoya AMACHI
224069af28 refact import cycle in docker package 2019-05-09 12:25:01 +09:00
Tomoya AMACHI
5e96fa6a55 create types package 2019-05-09 12:23:22 +09:00
Tomoya AMACHI
d773f56aae change var name : GCRCredPath -> GcpCredPath 2019-05-09 11:18:01 +09:00
Tomoya AMACHI
48a3ac53fb fix typo 2019-05-09 11:10:58 +09:00
Tomoya AMACHI
1d2fe13f28 delete dockerhub register analyzer 2019-05-09 11:08:11 +09:00
Tomoya AMACHI
c8127c458f GetToken only run extractor/docker 2019-05-09 11:06:20 +09:00
Teppei Fukuda
2c3bf38c73 Cache the saved image (fanal#9)
* Cache saved images

* Update README
2019-05-08 16:18:37 +09:00
Teppei Fukuda
1778abe4e3 Clear cache (fanal#8) 2019-05-07 21:32:06 +09:00
Teppei Fukuda
c0563f81bc Use local images when docker daemon exists (fanal#7)
* Use local images when docker daemon exists

* Fix error handling
2019-05-06 20:07:05 +09:00
Tomoya Amachi
028073bd02 merge ubuntu analyzer into debianbase analyzer (fanal#6)
* fix genuinetools/reg module version

* merge ubuntu analyzer into debianbase analyzer

* add os analyzer tests

* add redhat base test

* add redhatbase test file

* use AnalyzeOsError

* add gitignore empty folder

* change variable name in test codes

* skip coverage check on forked project
2019-05-06 11:28:18 +09:00
Teppei Fukuda
8394568aa0 Merge pull request fanal#5 from knqyf263/initial
Initial
2019-05-01 22:47:35 +09:00
Teppei Fukuda
1b5c33658f Revert "Initial commit (fanal#1)" (fanal#4)
This reverts commit 549812a784.
2019-05-01 22:42:59 +09:00
Teppei Fukuda
808a6459b4 Initial commit (fanal#1)
* Initial commit

* update

* add apk analyzer

* add dpkg analyzer

* Analyze docker image

* Update README

* Pull image

* Support private registry and use cache

* fix test

* fix for merge

* add rpm analyzer

* add tmp gcr

* Add test

* fix tmp : fix gcr bug on reg package

* fetch gcr container from credential

* use no auth docker token

* update alpine os analyzer

* continue package if no files found

* ignore vendor

* check OS

* add soft link file path

* Add rpm

* update comment

* Support library

* Add rpm analyzer without rpm command
2019-05-01 16:21:38 +09:00
knqyf263
05821edb41 Add rpm analyzer without rpm command 2019-05-01 16:09:49 +09:00
knqyf263
e55ec73aba Support library 2019-05-01 15:24:08 +09:00
Teppei Fukuda
fefe879691 Merge pull request fanal#2 from knqyf263/add_analyzer
Add analyzer
2019-05-01 12:30:25 +09:00
knqyf263
bd57e64268 update comment 2019-05-01 12:19:38 +09:00
knqyf263
66aac5d640 Add rpm 2019-04-29 10:40:18 +09:00
Tomoya AMACHI
f071cecd5c add soft link file path 2019-04-25 22:55:00 +09:00
Tomoya AMACHI
6a2ca8f74f check OS 2019-04-25 01:05:15 +09:00
Tomoya AMACHI
5529c83920 ignore vendor 2019-04-24 20:09:21 +09:00
Tomoya AMACHI
022b948545 continue package if no files found 2019-04-24 20:06:40 +09:00
Tomoya AMACHI
f99701585f update alpine os analyzer 2019-04-24 14:06:51 +09:00
Tomoya AMACHI
76333a382c use no auth docker token 2019-04-24 14:04:52 +09:00
Tomoya AMACHI
ed8de8b1aa fetch gcr container from credential 2019-04-18 21:03:36 +09:00
Tomoya AMACHI
e72e8693ef Merge remote-tracking branch 'origin/initial' into add_analyzer 2019-04-18 17:01:54 +09:00
Tomoya AMACHI
f06501ea2b fix tmp : fix gcr bug on reg package 2019-04-17 20:21:35 +09:00
knqyf263
e996e0112a Add test 2019-04-17 20:12:20 +09:00
Tomoya AMACHI
f6fe06fd12 add tmp gcr 2019-04-13 11:00:49 +09:00
Tomoya AMACHI
984ce9bd38 add rpm analyzer 2019-04-09 22:05:09 +09:00
Tomoya AMACHI
c7cf493ebd fix for merge 2019-04-09 15:55:15 +09:00
Tomoya Amachi
9916efbf5e Merge branch 'initial' into add_analyzer 2019-04-09 12:34:08 +09:00
knqyf263
0954e0f44b fix test 2019-04-08 00:23:39 +09:00
knqyf263
c7208b3efa Support private registry and use cache 2019-04-08 00:10:39 +09:00
knqyf263
262fee4195 Pull image 2019-04-07 18:01:27 +09:00
knqyf263
9f32fd0525 Update README 2019-04-07 15:04:15 +09:00
knqyf263
8065c4bf53 Analyze docker image 2019-04-07 14:56:43 +09:00
Tomoya AMACHI
64d449ee57 add dpkg analyzer 2019-04-04 01:37:43 +09:00
Tomoya AMACHI
68cb8ceba4 add apk analyzer 2019-04-03 12:16:36 +09:00
knqyf263
ec2b20dcd8 update 2019-04-01 23:34:38 +09:00
knqyf263
552c4de1a0 Initial commit 2019-04-01 00:16:25 +09:00
Teppei Fukuda
7b3bf986e8 Initial commit 2019-03-27 17:33:38 +09:00
1064 changed files with 252875 additions and 11009 deletions

19
.github/CODEOWNERS vendored Normal file
View File

@@ -0,0 +1,19 @@
# Global
* @knqyf263
# Helm chart
helm/trivy/ @krol3
# Misconfiguration scanning
examples/misconf/ @owenrumney @liamg @knqyf263
docs/docs/misconfiguration @owenrumney @liamg @knqyf263
docs/docs/cloud @owenrumney @liamg @knqyf263
pkg/fanal/analyzer/config @owenrumney @liamg @knqyf263
pkg/fanal/handler/misconf @owenrumney @liamg @knqyf263
pkg/cloud @owenrumney @liamg @knqyf263
pkg/flag/aws_flags.go @owenrumney @liamg @knqyf263
pkg/flag/misconf_flags.go @owenrumney @liamg @knqyf263
# Kubernetes scanning
pkg/k8s/ @josedonizetti @chen-keinan @knqyf263
docs/docs/kubernetes/ @josedonizetti @chen-keinan @knqyf263

59
.github/workflows/canary.yaml vendored Normal file
View File

@@ -0,0 +1,59 @@
name: Canary build
on:
push:
branches:
- 'main'
paths:
- '**.go'
- 'Dockerfile.canary'
- '.github/workflows/canary.yaml'
workflow_dispatch:
jobs:
build-binaries:
name: Build binaries
uses: ./.github/workflows/reusable-release.yaml
with:
goreleaser_config: goreleaser-canary.yml
goreleaser_options: '--snapshot --rm-dist --timeout 60m' # will not release
secrets: inherit
upload-binaries:
name: Upload binaries
needs: build-binaries # run this job after 'build-binaries' job completes
runs-on: ubuntu-latest
steps:
- name: Restore Trivy binaries from cache
uses: actions/cache@v3.0.9
with:
path: dist/
key: ${{ runner.os }}-bins-${{github.workflow}}-${{github.sha}}
# Upload artifacts
- name: Upload artifacts (trivy_Linux-64bit)
uses: actions/upload-artifact@v3
with:
name: trivy_Linux-64bit
path: dist/trivy_*_Linux-64bit.tar.gz
if-no-files-found: error
- name: Upload artifacts (trivy_Linux-ARM64)
uses: actions/upload-artifact@v3
with:
name: trivy_Linux-ARM64
path: dist/trivy_*_Linux-ARM64.tar.gz
if-no-files-found: error
- name: Upload artifacts (trivy_macOS-64bit)
uses: actions/upload-artifact@v3
with:
name: trivy_macOS-64bit
path: dist/trivy_*_macOS-64bit.tar.gz
if-no-files-found: error
- name: Upload artifacts (trivy_macOS-ARM64)
uses: actions/upload-artifact@v3
with:
name: trivy_macOS-ARM64
path: dist/trivy_*_macOS-ARM64.tar.gz
if-no-files-found: error

View File

@@ -16,14 +16,13 @@ jobs:
with:
fetch-depth: 0
persist-credentials: true
- uses: actions/setup-python@v3
- uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
pip install git+https://${GH_TOKEN}@github.com/squidfunk/mkdocs-material-insiders.git
pip install mike
pip install mkdocs-macros-plugin
pip install -r docs/build/requirements.txt
env:
GH_TOKEN: ${{ secrets.MKDOCS_AQUA_BOT }}
- name: Configure the git user

View File

@@ -18,14 +18,13 @@ jobs:
with:
fetch-depth: 0
persist-credentials: true
- uses: actions/setup-python@v3
- uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
pip install git+https://${GH_TOKEN}@github.com/squidfunk/mkdocs-material-insiders.git
pip install mike
pip install mkdocs-macros-plugin
pip install -r docs/build/requirements.txt
env:
GH_TOKEN: ${{ secrets.MKDOCS_AQUA_BOT }}
- name: Configure the git user
@@ -36,7 +35,7 @@ jobs:
if: ${{ github.event.inputs.version == '' }}
run: |
VERSION=$(echo ${{ github.ref }} | sed -e "s#refs/tags/##g")
mike deploy --push --update-aliases $VERSION latest
mike deploy --push --update-aliases ${VERSION%.*} latest
- name: Deploy the latest documents from manual trigger
if: ${{ github.event.inputs.version != '' }}
run: mike deploy --push --update-aliases ${{ github.event.inputs.version }} latest

View File

@@ -9,15 +9,14 @@ on:
paths:
- 'helm/trivy/**'
push:
branches: [main]
paths:
- 'helm/trivy/**'
tags:
- "v*"
env:
HELM_REP: helm-charts
GH_OWNER: aquasecurity
CHART_DIR: helm/trivy
KIND_VERSION: "v0.11.1"
KIND_IMAGE: "kindest/node:v1.21.1@sha256:69860bda5563ac81e3c0057d654b5253219618a22ec3a346306239bba8cfa1a6"
KIND_VERSION: "v0.14.0"
KIND_IMAGE: "kindest/node:v1.23.6@sha256:b1fa224cc6c7ff32455e0b1fd9cbfd3d3bc87ecaa8fcb06961ed1afb3db0f9ae"
jobs:
test-chart:
runs-on: ubuntu-20.04
@@ -27,18 +26,18 @@ jobs:
with:
fetch-depth: 0
- name: Install Helm
uses: azure/setup-helm@18bc76811624f360dbd7f18c2d4ecb32c7b87bab
uses: azure/setup-helm@b5b231a831f96336bbfeccc1329990f0005c5bb1
with:
version: v3.5.0
- name: Set up python
uses: actions/setup-python@v3
uses: actions/setup-python@v4
with:
python-version: 3.7
- name: Setup Chart Linting
id: lint
uses: helm/chart-testing-action@dae259e86a35ff09145c0805e2d7dd3f7207064a
uses: helm/chart-testing-action@afea100a513515fbd68b0e72a7bb0ae34cb62aec
- name: Setup Kubernetes cluster (KIND)
uses: helm/kind-action@94729529f85113b88f4f819c17ce61382e6d8478
uses: helm/kind-action@9e8295d178de23cbfbd8fa16cf844eec1d773a07
with:
version: ${{ env.KIND_VERSION }}
image: ${{ env.KIND_IMAGE }}
@@ -46,11 +45,11 @@ jobs:
run: ct lint-and-install --validate-maintainers=false --charts helm/trivy
- name: Run chart-testing (Ingress enabled)
run: |
sed -i -e '117s,false,'true',g' ./helm/trivy/values.yaml
sed -i -e '136s,false,'true',g' ./helm/trivy/values.yaml
ct lint-and-install --validate-maintainers=false --charts helm/trivy
publish-chart:
if: github.event_name == 'push'
if: github.event_name == 'push' || github.event_name == 'workflow_dispatch'
needs:
- test-chart
runs-on: ubuntu-20.04

View File

@@ -3,76 +3,37 @@ on:
push:
tags:
- "v*"
env:
GO_VERSION: "1.18"
GH_USER: "aqua-bot"
jobs:
release:
name: Release
uses: ./.github/workflows/reusable-release.yaml
with:
goreleaser_config: goreleaser.yml
goreleaser_options: '--rm-dist --timeout 90m'
secrets: inherit
deploy-packages:
name: Deploy rpm/dep packages
needs: release # run this job after 'release' job completes
runs-on: ubuntu-18.04 # 20.04 doesn't provide createrepo for now
env:
DOCKER_CLI_EXPERIMENTAL: "enabled"
permissions:
id-token: write # For cosign
packages: write # For GHCR
contents: read # Not required for public repositories, but for clarity
steps:
- name: Install dependencies
run: |
sudo apt-get -y update
sudo apt-get -y install rpm reprepro createrepo distro-info
- uses: sigstore/cosign-installer@51f8e5c6fce54e46006ae97d73b2b6315f518752
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
- name: Show available Docker Buildx platforms
run: echo ${{ steps.buildx.outputs.platforms }}
- name: Setup Go
uses: actions/setup-go@v2
with:
go-version: ${{ env.GO_VERSION }}
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Cache Go modules
uses: actions/cache@v3.0.1
- name: Restore Trivy binaries from cache
uses: actions/cache@v3.0.9
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }}
restore-keys: |
${{ runner.os }}-go-
- name: Login to docker.io registry
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to ghcr.io registry
uses: docker/login-action@v1
with:
registry: ghcr.io
username: ${{ env.GH_USER }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to ECR
uses: docker/login-action@v1
with:
registry: public.ecr.aws
username: ${{ secrets.ECR_ACCESS_KEY_ID }}
password: ${{ secrets.ECR_SECRET_ACCESS_KEY }}
- name: Generate SBOM
uses: CycloneDX/gh-gomod-generate-sbom@v1
with:
args: mod -licenses -json -output bom.json
version: ^v1
- name: Release
uses: goreleaser/goreleaser-action@v2
with:
version: v1.4.1
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.ORG_REPO_TOKEN }}
path: dist/
key: ${{ runner.os }}-bins-${{github.workflow}}-${{github.sha}}
- name: Install dependencies
run: |
sudo apt-get -y update
sudo apt-get -y install rpm reprepro createrepo distro-info
- name: Checkout trivy-repo
uses: actions/checkout@v3
with:
@@ -80,13 +41,17 @@ jobs:
path: trivy-repo
fetch-depth: 0
token: ${{ secrets.ORG_REPO_TOKEN }}
- name: Setup git settings
run: |
git config --global user.email "knqyf263@gmail.com"
git config --global user.name "Teppei Fukuda"
- name: Create rpm repository
run: ci/deploy-rpm.sh
- name: Import GPG key
run: echo -e "${{ secrets.GPG_KEY }}" | gpg --import
- name: Create deb repository
run: ci/deploy-deb.sh

108
.github/workflows/reusable-release.yaml vendored Normal file
View File

@@ -0,0 +1,108 @@
name: Reusable release
on:
workflow_call:
inputs:
goreleaser_config:
description: 'file path to GoReleaser config'
required: true
type: string
goreleaser_options:
description: 'GoReleaser options separated by spaces'
default: ''
required: false
type: string
env:
GH_USER: "aqua-bot"
jobs:
release:
name: Release
runs-on: ubuntu-latest
env:
DOCKER_CLI_EXPERIMENTAL: "enabled"
permissions:
id-token: write # For cosign
packages: write # For GHCR
contents: read # Not required for public repositories, but for clarity
steps:
- name: Cosign install
uses: sigstore/cosign-installer@ced07f21fb1da67979f539bbc6304c16c0677e76
- name: Set up QEMU
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v2
- name: Show available Docker Buildx platforms
run: echo ${{ steps.buildx.outputs.platforms }}
- name: Login to docker.io registry
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Login to ghcr.io registry
uses: docker/login-action@v2
with:
registry: ghcr.io
username: ${{ env.GH_USER }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Login to ECR
uses: docker/login-action@v2
with:
registry: public.ecr.aws
username: ${{ secrets.ECR_ACCESS_KEY_ID }}
password: ${{ secrets.ECR_SECRET_ACCESS_KEY }}
- name: Checkout code
uses: actions/checkout@v3
with:
fetch-depth: 0
- name: Setup Go
uses: actions/setup-go@v3
with:
go-version-file: go.mod
- name: Generate SBOM
uses: CycloneDX/gh-gomod-generate-sbom@v1
with:
args: mod -licenses -json -output bom.json
version: ^v1
- name: GoReleaser
uses: goreleaser/goreleaser-action@v3
with:
version: v1.4.1
args: release -f=${{ inputs.goreleaser_config}} ${{ inputs.goreleaser_options}}
env:
GITHUB_TOKEN: ${{ secrets.ORG_REPO_TOKEN }}
## push images to registries
## only for canary build
- name: Build and push
if: ${{ inputs.goreleaser_config == 'goreleaser-canary.yml' }}
uses: docker/build-push-action@v3
with:
platforms: linux/amd64, linux/arm64
file: ./Dockerfile.canary # path to Dockerfile
context: .
push: true
tags: |
aquasec/trivy:canary
ghcr.io/aquasecurity/trivy:canary
public.ecr.aws/aquasecurity/trivy:canary
- name: Cache Trivy binaries
uses: actions/cache@v3.0.9
with:
path: dist/
# use 'github.sha' to create a unique cache folder for each run.
# use 'github.workflow' to create a unique cache folder if some runs have same commit sha.
# e.g. build and release runs
key: ${{ runner.os }}-bins-${{github.workflow}}-${{github.sha}}

View File

@@ -13,11 +13,11 @@ jobs:
uses: actions/checkout@v3
- name: Run Trivy vulnerability scanner and create GitHub issues
uses: knqyf263/trivy-issue-action@v0.0.3
uses: knqyf263/trivy-issue-action@v0.0.4
with:
assignee: knqyf263
severity: CRITICAL
skip-dirs: integration,examples
label: vulnerability
label: kind/security
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

View File

@@ -34,12 +34,14 @@ jobs:
vuln
misconf
secret
license
image
fs
repo
sbom
server
k8s
alpine
redhat
@@ -62,6 +64,8 @@ jobs:
dotnet
java
go
c
c++
os
lang
@@ -78,6 +82,9 @@ jobs:
cli
flag
cyclonedx
spdx
helm
report

View File

@@ -7,7 +7,7 @@ jobs:
timeout-minutes: 1
runs-on: ubuntu-latest
steps:
- uses: actions/stale@v4
- uses: actions/stale@v6
with:
repo-token: ${{ secrets.GITHUB_TOKEN }}
stale-issue-message: 'This issue is stale because it has been labeled with inactivity.'

View File

@@ -10,7 +10,7 @@ on:
- 'LICENSE'
pull_request:
env:
GO_VERSION: "1.18"
TINYGO_VERSION: "0.25.0"
jobs:
test:
name: Test
@@ -19,15 +19,29 @@ jobs:
- uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v2
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
go-version-file: go.mod
- name: go mod tidy
run: |
go mod tidy
if [ -n "$(git status --porcelain)" ]; then
echo "Run 'go mod tidy' and push it"
exit 1
fi
- name: Lint
uses: golangci/golangci-lint-action@v3.1.0
uses: golangci/golangci-lint-action@v3.2.0
with:
version: v1.45
version: v1.49
args: --deadline=30m
skip-cache: true # https://github.com/golangci/golangci-lint-action/issues/244#issuecomment-1052197778
- name: Install TinyGo
run: |
wget https://github.com/tinygo-org/tinygo/releases/download/v${TINYGO_VERSION}/tinygo_${TINYGO_VERSION}_amd64.deb
sudo dpkg -i tinygo_${TINYGO_VERSION}_amd64.deb
- name: Run unit tests
run: make test
@@ -36,17 +50,37 @@ jobs:
name: Integration Test
runs-on: ubuntu-latest
steps:
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: ${{ env.GO_VERSION }}
id: go
- name: Check out code into the Go module directory
uses: actions/checkout@v3
- name: Check out code into the Go module directory
uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version-file: go.mod
- name: Run integration tests
run: make test-integration
- name: Run integration tests
run: make test-integration
module-test:
name: Module Integration Test
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v3
with:
go-version-file: go.mod
- name: Install TinyGo
run: |
wget https://github.com/tinygo-org/tinygo/releases/download/v${TINYGO_VERSION}/tinygo_${TINYGO_VERSION}_amd64.deb
sudo dpkg -i tinygo_${TINYGO_VERSION}_amd64.deb
- name: Run module integration tests
run: |
make test-module-integration
build-test:
name: Build Test
@@ -55,11 +89,11 @@ jobs:
DOCKER_CLI_EXPERIMENTAL: "enabled"
steps:
- name: Set up QEMU
uses: docker/setup-qemu-action@v1
uses: docker/setup-qemu-action@v2
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@v1
uses: docker/setup-buildx-action@v2
- name: Show available Docker Buildx platforms
run: echo ${{ steps.buildx.outputs.platforms }}
@@ -68,15 +102,15 @@ jobs:
uses: actions/checkout@v3
- name: Set up Go
uses: actions/setup-go@v2
uses: actions/setup-go@v3
with:
go-version: ${{ env.GO_VERSION }}
go-version-file: go.mod
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
uses: goreleaser/goreleaser-action@v3
with:
version: v1.4.1
args: release --snapshot --rm-dist --skip-publish
args: release --skip-sign --snapshot --rm-dist --skip-publish --timeout 90m
build-documents:
name: Documentation Test
@@ -87,14 +121,12 @@ jobs:
with:
fetch-depth: 0
persist-credentials: true
- uses: actions/setup-python@v3
- uses: actions/setup-python@v4
with:
python-version: 3.x
- name: Install dependencies
run: |
pip install mkdocs-material
pip install mike
pip install mkdocs-macros-plugin
pip install -r docs/build/requirements.txt
- name: Configure the git user
run: |
git config user.name "knqyf263"

4
.gitignore vendored
View File

@@ -16,6 +16,7 @@
*.out
.idea
.vscode
# Directory Cache Files
.DS_Store
@@ -30,3 +31,6 @@ integration/testdata/fixtures/images
# goreleaser output
dist
# WebAssembly
*.wasm

View File

@@ -21,19 +21,17 @@ linters-settings:
local-prefixes: github.com/aquasecurity
gosec:
excludes:
- G114
- G204
- G402
linters:
disable-all: true
enable:
- structcheck
- unused
- ineffassign
- typecheck
- govet
- errcheck
- varcheck
- deadcode
- revive
- gosec
- unconvert
@@ -44,11 +42,12 @@ linters:
- misspell
run:
go: 1.18
go: 1.19
skip-files:
- ".*._mock.go$"
- ".*._test.go$"
- "integration/*"
- "examples/*"
issues:
exclude-rules:

View File

@@ -1,4 +1,4 @@
FROM alpine:3.15.4
FROM alpine:3.16.2
RUN apk --no-cache add ca-certificates git
COPY trivy /usr/local/bin/trivy
COPY contrib/*.tpl contrib/

10
Dockerfile.canary Normal file
View File

@@ -0,0 +1,10 @@
FROM alpine:3.16.2
RUN apk --no-cache add ca-certificates git
# binaries were created with GoReleaser
# need to copy binaries from folder with correct architecture
# example architecture folder: dist/trivy_canary_build_linux_arm64/trivy
ARG TARGETARCH
COPY "dist/trivy_canary_build_linux_${TARGETARCH}/trivy" /usr/local/bin/trivy
COPY contrib/*.tpl contrib/
ENTRYPOINT ["trivy"]

View File

@@ -1,4 +1,4 @@
FROM golang:1.18.0
FROM golang:1.19.1
# Install protoc (cf. http://google.github.io/proto-lens/installing-protoc.html)
ENV PROTOC_ZIP=protoc-3.19.4-linux-x86_64.zip

View File

@@ -1,21 +1,42 @@
VERSION := $(shell git describe --tags)
LDFLAGS=-ldflags "-s -w -X=main.version=$(VERSION)"
VERSION := $(patsubst v%,%,$(shell git describe --tags --always)) #Strips the v prefix from the tag
LDFLAGS := -ldflags "-s -w -X=main.version=$(VERSION)"
GOPATH=$(shell go env GOPATH)
GOBIN=$(GOPATH)/bin
GOSRC=$(GOPATH)/src
GOPATH := $(shell go env GOPATH)
GOBIN := $(GOPATH)/bin
GOSRC := $(GOPATH)/src
TEST_MODULE_DIR := pkg/module/testdata
TEST_MODULE_SRCS := $(wildcard $(TEST_MODULE_DIR)/*/*.go)
TEST_MODULES := $(patsubst %.go,%.wasm,$(TEST_MODULE_SRCS))
EXAMPLE_MODULE_DIR := examples/module
EXAMPLE_MODULE_SRCS := $(wildcard $(EXAMPLE_MODULE_DIR)/*/*.go)
EXAMPLE_MODULES := $(patsubst %.go,%.wasm,$(EXAMPLE_MODULE_SRCS))
MKDOCS_IMAGE := aquasec/mkdocs-material:dev
MKDOCS_PORT := 8000
u := $(if $(update),-u)
# Tools
$(GOBIN)/wire:
GO111MODULE=off go get github.com/google/wire/cmd/wire
go install github.com/google/wire/cmd/wire@v0.5.0
$(GOBIN)/crane:
go install github.com/google/go-containerregistry/cmd/crane@v0.9.0
$(GOBIN)/golangci-lint:
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b $(GOBIN) v1.49.0
$(GOBIN)/labeler:
go install github.com/knqyf263/labeler@latest
$(GOBIN)/easyjson:
go install github.com/mailru/easyjson/...@v0.7.7
.PHONY: wire
wire: $(GOBIN)/wire
wire gen ./pkg/...
wire gen ./pkg/commands/... ./pkg/rpc/...
.PHONY: mock
mock: $(GOBIN)/mockery
@@ -26,19 +47,35 @@ deps:
go get ${u} -d
go mod tidy
$(GOBIN)/golangci-lint:
curl -sfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh| sh -s -- -b $(GOBIN) v1.41.1
.PHONY: generate-test-modules
generate-test-modules: $(TEST_MODULES)
# Compile WASM modules for unit and integration tests
%.wasm:%.go
@if !(type "tinygo" > /dev/null 2>&1); then \
echo "Need to install TinyGo. Follow https://tinygo.org/getting-started/install/"; \
exit 1; \
fi
go generate $<
# Run unit tests
.PHONY: test
test:
test: $(TEST_MODULES)
go test -v -short -coverprofile=coverage.txt -covermode=atomic ./...
integration/testdata/fixtures/images/*.tar.gz:
git clone https://github.com/aquasecurity/trivy-test-images.git integration/testdata/fixtures/images
integration/testdata/fixtures/images/*.tar.gz: $(GOBIN)/crane
mkdir -p integration/testdata/fixtures/images/
integration/scripts/download-images.sh
# Run integration tests
.PHONY: test-integration
test-integration: integration/testdata/fixtures/images/*.tar.gz
go test -v -tags=integration ./integration/...
go test -v -tags=integration ./integration/... ./pkg/fanal/test/integration/...
# Run WASM integration tests
.PHONY: test-module-integration
test-module-integration: integration/testdata/fixtures/images/*.tar.gz $(EXAMPLE_MODULES)
go test -v -tags=module_integration ./integration/...
.PHONY: lint
lint: $(GOBIN)/golangci-lint
@@ -70,15 +107,18 @@ install:
clean:
rm -rf integration/testdata/fixtures/images
$(GOBIN)/labeler:
go install github.com/knqyf263/labeler@latest
# Create labels on GitHub
.PHONY: label
label: $(GOBIN)/labeler
labeler apply misc/triage/labels.yaml -r aquasecurity/trivy -l 5
# Run MkDocs development server to preview the documentation page
.PHONY: mkdocs-serve
## Runs MkDocs development server to preview the documentation page
mkdocs-serve:
docker build -t $(MKDOCS_IMAGE) -f docs/build/Dockerfile docs/build
docker run --name mkdocs-serve --rm -v $(PWD):/docs -p $(MKDOCS_PORT):8000 $(MKDOCS_IMAGE)
# Generate JSON marshaler/unmarshaler for TinyGo/WebAssembly as TinyGo doesn't support encoding/json.
.PHONY: easyjson
easyjson: $(GOBIN)/easyjson
easyjson pkg/module/serialize/types.go

225
README.md
View File

@@ -1,14 +1,5 @@
<p align="center">
<img src="docs/imgs/logo.png" width="200">
</p>
<p align="center">
<a href="https://aquasecurity.github.io/trivy/">Documentation</a>
</p>
<p align="center">
Scanner for vulnerabilities in container images, file systems, and Git repositories, as well as for configuration issues
</p>
<div align="center">
<img src="docs/imgs/logo.png" width="200">
[![GitHub Release][release-img]][release]
[![Test][test-img]][test]
@@ -17,183 +8,115 @@ Scanner for vulnerabilities in container images, file systems, and Git repositor
[![GitHub All Releases][github-all-releases-img]][release]
![Docker Pulls][docker-pulls]
[📖 Documentation][docs]
</div>
# Abstract
`Trivy` (`tri` pronounced like **tri**gger, `vy` pronounced like en**vy**) is a simple and comprehensive scanner for vulnerabilities in container images, file systems, and Git repositories, as well as for configuration issues.
`Trivy` detects vulnerabilities of OS packages (Alpine, RHEL, CentOS, etc.) and language-specific packages (Bundler, Composer, npm, yarn, etc.).
In addition, `Trivy` scans Infrastructure as Code (IaC) files such as Terraform, Dockerfile and Kubernetes, to detect potential configuration issues that expose your deployments to the risk of attack.
`Trivy` is easy to use. Just install the binary and you're ready to scan.
Trivy (`tri` pronounced like **tri**gger, `vy` pronounced like en**vy**) is a comprehensive security scanner. It is reliable, fast, extremely easy to use, and it works wherever you need it.
<p align="center">
<img src="docs/imgs/overview.png" width="800" alt="Trivy Overview">
</p>
Trivy has different *scanners* that look for different security issues, and different *targets* where it can find those issues.
### Demo: Vulnerability Detection (Container Image)
<p align="center">
<img src="docs/imgs/vuln-demo.gif" width="1000" alt="Vulnerability Detection">
</p>
Targets:
- Container Image
- Filesystem
- Git repository (remote)
- Kubernetes cluster or resource
### Demo: Misconfiguration Detection (IaC Files)
<p align="center">
<img src="docs/imgs/misconf-demo.gif" width="1000" alt="Misconfiguration Detection">
</p>
Scanners:
- OS packages and software dependencies in use (SBOM)
- Known vulnerabilities (CVEs)
- IaC misconfigurations
- Sensitive information and secrets
# Quick Start
## Scan Image for Vulnerabilities
Simply specify an image name (and a tag).
Much more scanners and targets are coming up. Missing something? Let us know!
```
$ trivy image [YOUR_IMAGE_NAME]
Read more in the [Trivy Documentation][docs]
## Quick Start
### Get Trivy
Get Trivy by your favorite installation method. See [installation] section in the documentation for details. For example:
- `apt-get install trivy`
- `yum install trivy`
- `pacman -S trivy`
- `brew install aquasecurity/trivy/trivy`
- `sudo port install trivy`
- `docker run aquasec/trivy`
- Download binary from https://github.com/aquasecurity/trivy/releases/latest/
### General usage
```bash
trivy <target> [--security-checks <scanner1,scanner2>] TARGET_NAME
```
For example:
Examples:
```
```bash
$ trivy image python:3.4-alpine
```
<details>
<summary>Result</summary>
```
2019-05-16T01:20:43.180+0900 INFO Updating vulnerability database...
2019-05-16T01:20:53.029+0900 INFO Detecting Alpine vulnerabilities...
https://user-images.githubusercontent.com/1161307/171013513-95f18734-233d-45d3-aaf5-d6aec687db0e.mov
python:3.4-alpine3.9 (alpine 3.9.2)
===================================
Total: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 0, CRITICAL: 0)
+---------+------------------+----------+-------------------+---------------+--------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+---------+------------------+----------+-------------------+---------------+--------------------------------+
| openssl | CVE-2019-1543 | MEDIUM | 1.1.1a-r1 | 1.1.1b-r1 | openssl: ChaCha20-Poly1305 |
| | | | | | with long nonces |
+---------+------------------+----------+-------------------+---------------+--------------------------------+
```
</details>
## Scan Filesystem for Vulnerabilities and Misconfigurations
Simply specify a directory to scan.
```bash
$ trivy fs --security-checks vuln,config [YOUR_PROJECT_DIR]
```
For example:
```bash
$ trivy fs --security-checks vuln,config myproject/
$ trivy fs --security-checks vuln,secret,config myproject/
```
<details>
<summary>Result</summary>
```bash
2021-07-09T12:03:27.564+0300 INFO Number of language-specific files: 1
2021-07-09T12:03:27.564+0300 INFO Detecting pipenv vulnerabilities...
2021-07-09T12:03:27.566+0300 INFO Detected config files: 1
https://user-images.githubusercontent.com/1161307/171013917-b1f37810-f434-465c-b01a-22de036bd9b3.mov
Pipfile.lock (pipenv)
=====================
Total: 1 (HIGH: 1, CRITICAL: 0)
+----------+------------------+----------+-------------------+---------------+---------------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+----------+------------------+----------+-------------------+---------------+---------------------------------------+
| httplib2 | CVE-2021-21240 | HIGH | 0.12.1 | 0.19.0 | python-httplib2: Regular |
| | | | | | expression denial of |
| | | | | | service via malicious header |
| | | | | | -->avd.aquasec.com/nvd/cve-2021-21240 |
+----------+------------------+----------+-------------------+---------------+---------------------------------------+
Dockerfile (dockerfile)
=======================
Tests: 23 (SUCCESSES: 22, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (HIGH: 1, CRITICAL: 0)
+---------------------------+------------+----------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+----------------------+----------+------------------------------------------+
| Dockerfile Security Check | DS002 | Image user is 'root' | HIGH | Last USER command in |
| | | | | Dockerfile should not be 'root' |
| | | | | -->avd.aquasec.com/appshield/ds002 |
+---------------------------+------------+----------------------+----------+------------------------------------------+
```
</details>
## Scan Directory for Misconfigurations
Simply specify a directory containing IaC files such as Terraform and Dockerfile.
```
$ trivy config [YOUR_IAC_DIR]
```
For example:
```
$ ls build/
Dockerfile
$ trivy config ./build
```bash
$ trivy k8s --report summary cluster
```
<details>
<summary>Result</summary>
```
2021-07-09T10:06:29.188+0300 INFO Need to update the built-in policies
2021-07-09T10:06:29.188+0300 INFO Downloading the built-in policies...
2021-07-09T10:06:30.520+0300 INFO Detected config files: 1
Dockerfile (dockerfile)
=======================
Tests: 23 (SUCCESSES: 22, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 1, CRITICAL: 0)
+---------------------------+------------+----------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+----------------------+----------+------------------------------------------+
| Dockerfile Security Check | DS002 | Image user is 'root' | HIGH | Last USER command in |
| | | | | Dockerfile should not be 'root' |
| | | | | -->avd.aquasec.com/appshield/ds002 |
+---------------------------+------------+----------------------+----------+------------------------------------------+
```
![k8s summary](docs/imgs/trivy-k8s.png)
</details>
Note that you can also receive a detailed scan, scan only a specific namespace, resource and more.
# Features
Find out more in the [Trivy Documentation][docs] - [Getting Started][getting-started]
## Highlights
- Comprehensive vulnerability detection
- OS packages (Alpine Linux, Red Hat Universal Base Image, Red Hat Enterprise Linux, CentOS, AlmaLinux, Rocky Linux, CBL-Mariner, Oracle Linux, Debian, Ubuntu, Amazon Linux, openSUSE Leap, SUSE Enterprise Linux, Photon OS and Distroless)
- **Language-specific packages** (Bundler, Composer, Pipenv, Poetry, npm, yarn, Cargo, NuGet, Maven, and Go)
- Misconfiguration detection (IaC scanning)
- A wide variety of built-in policies are provided **out of the box**
- Kubernetes, Docker, Terraform, and more coming soon
- Support custom policies
- Simple
- Specify only an image name, a path to config files, or an artifact name
- Fast
- The first scan will finish within 10 seconds (depending on your network). Consequent scans will finish in single seconds.
- Easy installation
- `apt-get install`, `yum install` and `brew install` are possible.
- **No pre-requisites** such as installation of DB, libraries, etc.
- High accuracy
- **Especially [Alpine Linux][alpine] and RHEL/CentOS**
- Other OSes are also high
- DevSecOps
- **Suitable for CI** such as GitHub Actions, Jenkins, GitLab CI, etc.
- Support multiple targets
- container image, local filesystem and remote git repository
- High accuracy, especially [Alpine Linux][alpine] and RHEL/CentOS
- Supply chain security (SBOM support)
- Support CycloneDX
# Integrations
- [GitHub Actions][action]
- [Visual Studio Code][vscode]
# Documentation
The official documentation, which provides detailed installation, configuration, and quick start guides, is available at https://aquasecurity.github.io/trivy/.
- Support SPDX
- Misconfiguration detection (IaC scanning)
- Wide variety of security checks are provided **out of the box**
- Kubernetes, Docker, Terraform, and more
- User-defined policies using [OPA Rego][rego]
- Secret detection
- A wide variety of built-in rules are provided **out of the box**
- User-defined patterns
- Efficient scanning of container images
- Simple
- Available in apt, yum, brew, dockerhub
- **No pre-requisites** such as a database, system libraries, or eny environmental requirements. The binary runs anywhere.
- The first scan will finish within 10 seconds (depending on your network). Consequent scans will finish instantaneously.
- Fits your workflow
- **Great for CI** such as GitHub Actions, Jenkins, GitLab CI, etc.
- Available as extension for IDEs such as vscode, jetbrains, vim
- Available as extension for Docker Desktop, Rancher Desktop
- See [integrations] section in the documentation.
---
@@ -212,10 +135,14 @@ Contact us about any matter by opening a GitHub Discussion [here][discussions]
[license]: https://github.com/aquasecurity/trivy/blob/main/LICENSE
[license-img]: https://img.shields.io/badge/License-Apache%202.0-blue.svg
[alpine]: https://ariadne.space/2021/06/08/the-vulnerability-remediation-lifecycle-of-alpine-containers/
[action]: https://github.com/aquasecurity/trivy-action
[vscode]: https://github.com/aquasecurity/trivy-vscode-extension
[getting-started]: https://aquasecurity.github.io/trivy/latest/getting-started/installation/
[docs]: https://aquasecurity.github.io/trivy
[integrations]:https://aquasecurity.github.io/trivy/latest/tutorials/integrations/
[installation]:https://aquasecurity.github.io/trivy/latest/getting-started/installation/
[releases]: https://github.com/aquasecurity/trivy/releases
[alpine]: https://ariadne.space/2021/06/08/the-vulnerability-remediation-lifecycle-of-alpine-containers/
[rego]: https://www.openpolicyagent.org/docs/latest/#rego
[aquasec]: https://aquasec.com
[oss]: https://www.aquasec.com/products/open-source-projects/
[discussions]: https://github.com/aquasecurity/trivy/discussions

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -0,0 +1,56 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="_x30_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 265 135" enable-background="new 0 0 265 135" xml:space="preserve">
<g>
<path fill="#07242D" d="M148.629,103.076v5.928c-4.038,0-7.676-1.454-10.545-3.863c-3.605-3.025-5.894-7.565-5.894-12.638V62.815
h5.894v13.471h10.545v5.966h-10.545v10.395C138.164,98.419,142.84,103.076,148.629,103.076z"/>
<path fill="#07242D" d="M169.65,76.285v5.889c-5.591,0.011-10.143,4.446-10.345,9.984v16.845h-5.908V76.285h5.908v3.735
C162.113,77.689,165.718,76.291,169.65,76.285z"/>
<path fill="#07242D" d="M173.447,68.698v-5.9h5.897v5.9H173.447z M173.447,109.003V76.285h5.897v32.719H173.447z"/>
<path fill="#07242D" d="M215.508,76.285l-16.348,32.719l-16.364-32.719h6.699l9.665,19.32l9.646-19.32L215.508,76.285z"/>
<path fill="#07242D" d="M250.874,76.285c0,0,0,35.771,0,38.135c0,9.136-7.493,16.428-16.37,16.423
c-4.157,0-8.009-1.576-10.934-4.196l4.24-4.24c1.809,1.532,4.143,2.464,6.693,2.459c5.745,0,10.396-4.696,10.396-10.446v-9.141
c-2.85,2.359-6.488,3.724-10.396,3.724c-8.894,0.005-16.384-7.171-16.384-16.372c0-0.194,0-16.345,0-16.345h5.972
c0,0,0.003,15.907,0.003,16.345c0,5.722,4.659,10.451,10.409,10.446c5.745,0,10.396-4.701,10.396-10.446V76.285H250.874z"/>
</g>
<g>
<polygon fill="#FFFFFF" points="65.469,5.431 10.124,37.409 10.125,101.877 65.462,134.109 120.813,101.895 120.813,37.407 "/>
<g>
<path fill="#1904DA" d="M63.957,92.94V79.575c-6.048-2.856-9.846-8.792-9.768-15.27l-12.456-7.193
c-0.783,7.101,0.852,14.447,4.636,20.771C50.545,84.86,56.46,89.923,63.957,92.94z"/>
<path fill="#1904DA" d="M63.957,111.255V95.742c-8.438-3.162-15.089-8.73-19.77-16.553c-4.275-7.141-5.989-15.458-4.842-23.457
l-11.564-6.678C21.14,74.652,36.57,101.186,63.957,111.255z"/>
<path fill="#08B1D5" d="M66.804,95.596v15.649c26.877-10.306,42.715-37.348,36.372-62.1l-11.488,6.693
c1.481,8.635,0.079,16.879-4.065,23.865C83.476,86.697,76.281,92.188,66.804,95.596z"/>
<path fill="#08B1D5" d="M66.804,79.551v13.402c8.456-3.219,14.89-8.239,18.632-14.548c3.675-6.197,5.016-13.512,3.896-21.2
L76.888,64.38C76.826,70.53,73.171,76.032,66.804,79.551z"/>
<path fill="#FFC900" d="M78.53,41.442c5.228,2.549,9.501,6.608,12.373,11.749l11.183-6.458c-0.075-0.106-0.146-0.211-0.211-0.316
c-4.4-7.116-10.209-12.47-17.267-15.913c-19.641-9.576-44.026-2.441-55.772,16.23l11.227,6.481
C48.47,40.151,65.268,34.975,78.53,41.442z"/>
<path fill="#FFC900" d="M65.771,55.646c1.762,0,3.527,0.385,5.182,1.193h0.001c2.175,1.062,3.954,2.75,5.158,4.894L88.7,54.463
c-2.618-4.7-6.516-8.409-11.285-10.735c-12.078-5.888-27.409-1.16-35.147,10.76l12.525,7.229
C57.397,57.836,61.572,55.646,65.771,55.646z"/>
<path fill="#08B1D5" d="M66.804,130.848l51.828-30.205V40.14l-13.177,7.677c7.242,26.586-9.654,55.513-38.651,66.142V130.848z"/>
<path fill="#1904DA" d="M25.5,47.738l-13.196-7.621v60.509l51.653,30.22v-16.883C34.902,103.736,18.087,74.773,25.5,47.738z"/>
<path fill="#FFC900" d="M85.722,28.218c7.498,3.656,13.661,9.329,18.316,16.859c0.074,0.12,0.164,0.245,0.263,0.376l13.056-7.539
L65.469,7.948l-51.9,29.973l13.061,7.54C39.042,25.644,64.896,18.062,85.722,28.218z"/>
<path fill="#FF0036" d="M74.264,64.806c0.001-0.014,0.022-0.508-0.015-1.301c-0.104-0.324-1.328-2.715-4.385-4.383
c-2.089-1.139-4.769-1.27-7.357-0.362c-2.536,0.891-4.688,2.664-5.922,4.873c-0.015,0.192-0.044,0.647-0.022,1.173
c0.167,4.129,2.721,9.743,7.931,12.311l0.802,0.383l0.696-0.372C71.055,74.294,74.07,69.803,74.264,64.806z"/>
</g>
</g>
<g>
<path fill="#07242D" d="M149.768,48.152h-8.789c-4.846,0-8.789-3.943-8.789-8.789c0-4.846,3.943-8.789,8.789-8.789
s8.789,3.943,8.789,8.789V48.152z M140.979,34.143c-2.878,0-5.22,2.342-5.22,5.22c0,2.878,2.342,5.22,5.22,5.22h5.22v-5.22
C146.199,36.485,143.858,34.143,140.979,34.143z"/>
<path fill="#07242D" d="M208.745,48.152h-8.789c-4.846,0-8.789-3.943-8.789-8.789c0-4.846,3.943-8.789,8.789-8.789
c4.846,0,8.789,3.943,8.789,8.789V48.152z M199.956,34.143c-2.878,0-5.22,2.342-5.22,5.22c0,2.878,2.342,5.22,5.22,5.22h5.22v-5.22
C205.176,36.485,202.835,34.143,199.956,34.143z"/>
<path fill="#07242D" d="M180.296,48.156c-4.848,0-8.793-3.944-8.793-8.793v-8.248h3.571v8.248c0,2.879,2.343,5.222,5.222,5.222
c2.879,0,5.222-2.343,5.222-5.222v-8.248h3.571v8.248C189.089,44.211,185.144,48.156,180.296,48.156z"/>
<path fill="#07242D" d="M160.636,30.574c-4.846,0-8.789,3.943-8.789,8.789c0,4.846,3.943,8.789,8.789,8.789l3.569-3.569h-3.569
c-2.878,0-5.22-2.342-5.22-5.22c0-2.878,2.342-5.22,5.22-5.22c2.878,0,5.22,2.342,5.22,5.22V56.54h3.569V39.363
C169.425,34.516,165.482,30.574,160.636,30.574z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 81 KiB

View File

@@ -0,0 +1,202 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="_x30_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 500 524" enable-background="new 0 0 500 524" xml:space="preserve">
<g display="none">
<g display="inline">
<path fill="#07242D" d="M-483.763,450.803h-11.559l-22.557-22.807c-0.919,0.114-1.853,0.174-2.802,0.174v22.632h-8.238v-63.931
h8.239c0,0-0.016,33.158,0,33.158c4.013,0,7.684-1.656,10.29-4.32l9.86-10.073h11.814l-16.032,15.918
c-1.42,1.421-3.031,2.655-4.787,3.659L-483.763,450.803z"/>
<path fill="#07242D" d="M-438.316,405.517v22.819c0,0,0,0.033,0,0.049c0,12.39-10.039,22.418-22.429,22.418
c-12.389,0-22.421-10.059-22.421-22.448c0-0.017,0-22.837,0-22.837h7.989v22.819c0,7.967,6.466,14.457,14.433,14.457
c7.966,0,14.424-6.491,14.424-14.457v-22.819H-438.316z"/>
<path fill="#07242D" d="M-385.244,428.166c0,12.501-10.133,22.636-22.636,22.636c-5.485,0-10.514-1.95-14.431-5.196v5.196h-8.218
c0.005-0.516,0.005-63.931,0.005-63.931h8.217l-0.004,23.854c3.918-3.246,8.947-5.196,14.432-5.196
C-395.377,405.529-385.242,415.664-385.244,428.166z M-393.437,428.166c0-7.976-6.466-14.441-14.442-14.441
c-7.793,0-14.443,6.329-14.443,14.418c0,8.089,6.649,14.464,14.443,14.464C-399.903,442.607-393.437,436.142-393.437,428.166z"/>
<path fill="#07242D" d="M-335.539,431.11h-36.518c1.375,6.517,7.157,11.435,14.075,11.435c4.514,0,8.538-2.095,11.172-5.362h9.577
c-3.496,8.008-11.475,13.619-20.748,13.619c-12.489,0-22.644-10.173-22.644-22.676c0-12.503,10.155-22.608,22.644-22.608
C-344.426,405.411-333.664,417.688-335.539,431.11z M-344.611,422.85c-2.103-5.316-7.296-9.06-13.371-9.06
c-6.076,0-11.275,3.746-13.382,9.06H-344.611z"/>
<path fill="#07242D" d="M-306.194,420.895v7.548h-23.302v-7.548H-306.194z"/>
<path fill="#07242D" d="M-252.987,428.166c0,12.501-10.133,22.636-22.636,22.636c-5.485,0-10.514-1.95-14.431-5.196v5.196h-8.218
c0.005-0.516,0.005-63.931,0.005-63.931h8.218l-0.004,23.854c3.918-3.246,8.946-5.196,14.431-5.196
C-263.12,405.529-252.985,415.664-252.987,428.166z M-261.181,428.166c0-7.976-6.467-14.441-14.442-14.441
c-7.794,0-14.443,6.329-14.443,14.418c0,8.089,6.649,14.464,14.443,14.464C-267.647,442.607-261.181,436.142-261.181,428.166z"/>
<path fill="#07242D" d="M-203.283,431.11h-36.518c1.375,6.517,7.157,11.435,14.075,11.435c4.514,0,8.538-2.095,11.172-5.362h9.577
c-3.496,8.008-11.475,13.619-20.748,13.619c-12.489,0-22.644-10.173-22.644-22.676c0-12.503,10.155-22.608,22.644-22.608
C-212.17,405.411-201.408,417.688-203.283,431.11z M-212.355,422.85c-2.103-5.316-7.296-9.06-13.371-9.06
c-6.076,0-11.275,3.746-13.382,9.06H-212.355z"/>
<path fill="#07242D" d="M-151.113,428.114c0,15.871,0,22.688,0,22.688h-8.262c0,0,0-14.878,0-22.688
c0-8.095-6.591-14.327-14.363-14.327c-7.772,0-14.393,6.163-14.393,14.327c0,7.814,0,22.688,0,22.688h-8.26v-45.285
c0,0,3.539,0,8.26,0v5.101c0,0,5.421-5.101,14.393-5.101C-163.095,405.517-151.113,413.789-151.113,428.114z"/>
<path fill="#07242D" d="M-112.598,438.373l5.799,5.798c-4.098,4.097-9.758,6.632-16.01,6.632c-6.252,0-11.912-2.534-16.01-6.632
c-4.097-4.098-6.632-9.758-6.632-16.01s2.534-11.912,6.632-16.01c4.098-4.097,9.758-6.632,16.01-6.632
c6.252,0,11.912,2.534,16.01,6.632l-5.799,5.799c-2.613-2.615-6.224-4.231-10.212-4.231c-3.988,0-7.599,1.617-10.212,4.231
c-2.614,2.613-4.23,6.224-4.23,10.212s1.616,7.599,4.23,10.213c2.613,2.613,6.224,4.229,10.212,4.229
C-118.821,442.602-115.211,440.986-112.598,438.373z"/>
<path fill="#07242D" d="M-55.678,428.174c0,15.827,0,22.626,0,22.626h-8.239c0,0,0-14.838,0-22.626
c0-8.072-6.575-14.287-14.324-14.287c-7.751,0-14.353,6.146-14.353,14.287c0,7.793,0,22.626,0,22.626h-8.238v-63.929h8.238v23.856
c0,0,5.405-5.086,14.353-5.086C-67.626,405.641-55.678,413.889-55.678,428.174z"/>
</g>
<g display="inline">
<path fill="#07242D" d="M186.582,442.579v8.203c-5.588,0-10.623-2.012-14.594-5.346c-4.989-4.186-8.157-10.469-8.157-17.489
v-41.085h8.157v18.642h14.594v8.257h-14.594v14.386C172.1,436.134,178.571,442.579,186.582,442.579z"/>
<path fill="#07242D" d="M215.674,405.503v8.149c-7.739,0.015-14.037,6.152-14.317,13.818v23.312h-8.176v-45.279h8.176v5.169
C205.243,407.446,210.232,405.51,215.674,405.503z"/>
<path fill="#07242D" d="M220.928,395.003v-8.165h8.161v8.165H220.928z M220.928,450.782v-45.279h8.161v45.279H220.928z"/>
<path fill="#07242D" d="M279.137,405.503l-22.624,45.279l-22.647-45.279h9.271l13.376,26.737l13.349-26.737H279.137z"/>
<path fill="#07242D" d="M328.08,405.503c0,0,0,49.504,0,52.776c0,12.643-10.369,22.736-22.655,22.728
c-5.753,0-11.084-2.181-15.131-5.807l5.868-5.868c2.504,2.12,5.734,3.41,9.263,3.403c7.95,0,14.386-6.498,14.386-14.456v-12.651
c-3.944,3.264-8.979,5.154-14.386,5.154c-12.309,0.008-22.674-9.924-22.674-22.659c0-0.269,0-22.62,0-22.62h8.265
c0,0,0.004,22.014,0.004,22.62c0,7.919,6.448,14.463,14.406,14.456c7.95,0,14.386-6.506,14.386-14.456v-22.62H328.08z"/>
</g>
<g display="inline">
<path fill="#07242D" d="M1186.898,438.384c-0.411,4.687-4.656,12.67-15.302,12.67c-10.092,0-16.135-6.761-16.135-6.761
l5.797-5.801c4.906,4.664,10.338,4.372,10.338,4.372c3.473-0.238,6.258-2.643,6.469-5.471c0.242-3.235-2.009-5.486-6.469-6.124
c-2.098-0.307-7.184-0.791-11.36-4.533c-1.36-1.222-6.489-6.577-2.217-14.191c0.834-1.491,4.556-6.769,13.577-6.769
c0,0,7.434-0.53,14.311,5.086l-5.866,5.863c-1.16-0.96-4.46-2.904-8.444-2.881c-7.207,0.046-7.007,4.011-7.007,4.011
c0.061,3.166,2.874,4.864,7.007,5.409C1185.672,425.114,1187.309,433.743,1186.898,438.384z"/>
<path fill="#07242D" d="M1215.419,442.848v8.206c-5.59,0-10.626-2.013-14.599-5.348c-4.99-4.188-8.16-10.473-8.16-17.495v-41.099
h8.16v18.648h14.599v8.26h-14.599v14.391C1200.932,436.401,1207.405,442.848,1215.419,442.848z"/>
<path fill="#07242D" d="M1263.522,428.372v22.682h-22.705c-0.5,0-0.999-0.015-1.495-0.054c-6.431-0.423-12.128-3.527-15.985-8.214
c-3.289-4.003-5.171-8.928-5.186-14.414c0.526-25.548,35.106-31.264,44.03-7.699
C1263.068,423.132,1263.522,425.76,1263.522,428.372z M1255.131,428.372c0.054-12.824-15.563-19.132-24.433-10.135l-0.004-0.008
c-2.609,2.605-4.226,6.17-4.226,10.142c0,7.937,6.435,14.399,14.368,14.399c3.976,0,14.295,0,14.295,0
S1255.131,432.352,1255.131,428.372z"/>
<path fill="#07242D" d="M1293.898,405.76v8.152c-7.741,0.015-14.042,6.154-14.322,13.823v23.319h-8.179V405.76h8.179v5.171
C1283.464,407.704,1288.454,405.767,1293.898,405.76z"/>
<path fill="#07242D" d="M1344.448,428.411c0,12.509-10.135,22.643-22.639,22.643c-5.486,0-10.515-1.952-14.433-5.194v5.194h-8.221
c0.008-0.515,0.008-63.942,0.008-63.942h8.217l-0.004,23.857c3.919-3.25,8.947-5.202,14.433-5.202
C1334.313,405.767,1344.452,415.91,1344.448,428.411z M1336.254,428.411c0-7.975-6.466-14.445-14.445-14.445
c-7.795,0-14.445,6.331-14.445,14.422c0,8.091,6.65,14.468,14.445,14.468C1329.788,442.856,1336.254,436.394,1336.254,428.411z"/>
<path fill="#07242D" d="M1394.394,428.411c0,12.509-10.15,22.643-22.643,22.643s-22.651-10.135-22.651-22.643
s10.157-22.651,22.651-22.651S1394.394,415.91,1394.394,428.411z M1386.127,428.411c0-7.937-6.431-14.376-14.376-14.376
c-7.941,0-14.387,6.431-14.387,14.376s6.446,14.383,14.387,14.383C1379.696,442.794,1386.127,436.355,1386.127,428.411z"/>
<path fill="#07242D" d="M1444.414,428.372v22.682h-22.705c-0.499,0-0.999-0.015-1.494-0.054
c-6.431-0.423-12.128-3.527-15.985-8.214c-3.289-4.003-5.171-8.928-5.186-14.414c0.526-25.548,35.106-31.264,44.03-7.699
C1443.961,423.132,1444.414,425.76,1444.414,428.372z M1436.024,428.372c0.054-12.824-15.563-19.132-24.433-10.135l-0.004-0.008
c-2.609,2.605-4.226,6.17-4.226,10.142c0,7.937,6.435,14.399,14.368,14.399c3.976,0,14.295,0,14.295,0
S1436.024,432.352,1436.024,428.372z"/>
<path fill="#07242D" d="M1474.791,405.76v8.152c-7.741,0.015-14.042,6.154-14.322,13.823v23.319h-8.179V405.76h8.179v5.171
C1464.356,407.704,1469.347,405.767,1474.791,405.76z"/>
<path fill="#07242D" d="M1521.556,451.031h-8.214v-5.194c-3.919,3.242-8.951,5.194-14.43,5.194
c-12.501,0-22.635-10.127-22.635-22.628s10.135-22.636,22.635-22.636c5.478,0,10.511,1.952,14.43,5.194l0.008-23.85h8.221
C1521.572,387.112,1521.556,450.516,1521.556,451.031z M1513.35,428.38c0-8.091-6.646-14.422-14.437-14.422
c-7.975,0-14.445,6.469-14.445,14.445s6.469,14.437,14.445,14.437C1506.704,442.84,1513.35,436.471,1513.35,428.38z"/>
</g>
<g display="inline">
<path fill="#07242D" d="M1711.171,438.276l5.802,5.802c-4.1,4.096-9.763,6.632-16.014,6.632c-6.255,0-11.918-2.536-16.018-6.632
c-4.1-4.103-6.635-9.759-6.635-16.014s2.536-11.918,6.635-16.022c4.1-4.096,9.763-6.632,16.018-6.632
c6.251,0,11.915,2.536,16.014,6.632l-5.802,5.802c-2.613-2.613-6.224-4.234-10.213-4.234c-3.992,0-7.604,1.621-10.216,4.234
c-2.617,2.613-4.234,6.224-4.234,10.22c0,3.988,1.618,7.6,4.234,10.213c2.613,2.613,6.224,4.234,10.216,4.234
C1704.947,442.511,1708.559,440.889,1711.171,438.276z"/>
<path fill="#07242D" d="M1722.967,450.71v-63.95h8.241v63.95H1722.967z"/>
<path fill="#07242D" d="M1783.282,428.064c0,12.51-10.151,22.646-22.646,22.646c-12.495,0-22.654-10.136-22.654-22.646
s10.159-22.654,22.654-22.654C1773.131,405.41,1783.282,415.561,1783.282,428.064z M1775.013,428.064
c0-7.938-6.432-14.378-14.378-14.378c-7.942,0-14.389,6.432-14.389,14.378c0,7.946,6.447,14.385,14.389,14.385
C1768.581,442.449,1775.013,436.01,1775.013,428.064z"/>
<path fill="#07242D" d="M1833.833,405.41v22.823c0,0,0,0.038,0,0.054c0,12.395-10.04,22.423-22.435,22.423
c-12.395,0-22.427-10.059-22.427-22.454c0-0.015,0-22.846,0-22.846h7.992v22.823c0,7.976,6.466,14.462,14.435,14.462
c7.969,0,14.431-6.486,14.431-14.462V405.41H1833.833z"/>
<path fill="#07242D" d="M1884.777,450.687h-8.218v-5.195c-3.915,3.243-8.945,5.195-14.431,5.195
c-12.503,0-22.634-10.128-22.634-22.631c0-12.503,10.132-22.638,22.634-22.638c5.487,0,10.516,1.952,14.431,5.195l0.011-23.852
h8.219C1884.789,386.76,1884.773,450.172,1884.777,450.687z M1876.574,428.033c0-8.092-6.651-14.424-14.447-14.424
c-7.973,0-14.443,6.47-14.443,14.447c0,7.976,6.466,14.439,14.443,14.439C1869.923,442.495,1876.574,436.125,1876.574,428.033z"/>
<path fill="#07242D" d="M1922.865,438.038c-0.411,4.687-4.657,12.672-15.303,12.672c-10.094,0-16.137-6.762-16.137-6.762
l5.798-5.802c4.906,4.664,10.339,4.372,10.339,4.372c3.473-0.238,6.259-2.643,6.47-5.471c0.242-3.235-2.009-5.487-6.47-6.124
c-2.098-0.307-7.185-0.792-11.361-4.534c-1.36-1.222-6.489-6.578-2.217-14.193c0.834-1.491,4.557-6.77,13.578-6.77
c0,0,7.435-0.53,14.312,5.087l-5.867,5.863c-1.16-0.961-4.461-2.905-8.445-2.882c-7.208,0.046-7.008,4.011-7.008,4.011
c0.062,3.166,2.874,4.864,7.008,5.41C1921.639,424.767,1923.276,433.397,1922.865,438.038z"/>
<path fill="#07242D" d="M1975.107,428.041c0,12.526-10.151,22.73-22.661,22.73c-5.471,0-10.493-1.952-14.416-5.195v35.371h-8.276
V405.41h8.276v5.156c3.923-3.22,8.945-5.156,14.416-5.156C1964.956,405.41,1975.107,415.523,1975.107,428.041z M1966.831,428.041
c0-7.953-6.432-14.347-14.385-14.347s-14.416,6.393-14.416,14.347s6.463,14.462,14.416,14.462S1966.831,435.994,1966.831,428.041z
"/>
<path fill="#07242D" d="M1981.877,450.71v-63.95h8.245v63.95H1981.877z"/>
<path fill="#07242D" d="M2042.192,428.064c0,12.51-10.151,22.646-22.646,22.646c-12.495,0-22.654-10.136-22.654-22.646
s10.159-22.654,22.654-22.654C2032.041,405.41,2042.192,415.561,2042.192,428.064z M2033.916,428.064
c0-7.938-6.432-14.378-14.37-14.378c-7.946,0-14.393,6.432-14.393,14.378c0,7.946,6.447,14.385,14.393,14.385
C2027.484,442.449,2033.916,436.01,2033.916,428.064z"/>
<path fill="#07242D" d="M2049.016,394.906v-8.168h8.168v8.168H2049.016z M2049.016,450.71v-45.3h8.168v45.3H2049.016z"/>
<path fill="#07242D" d="M2087.737,442.503v8.207c-5.594,0-10.627-2.013-14.6-5.348c-4.987-4.188-8.161-10.474-8.161-17.497V386.76
h8.161v18.65h14.6v8.261h-14.6v14.393C2073.252,436.056,2079.722,442.503,2087.737,442.503z"/>
</g>
<g display="inline">
<path fill="#07242D" d="M690.837,442.596v8.206c-5.59,0-10.626-2.013-14.599-5.348c-4.99-4.188-8.16-10.473-8.16-17.495V386.86
h8.16v18.648h14.599v8.26h-14.599v14.391C676.35,436.15,682.823,442.596,690.837,442.596z"/>
<path fill="#07242D" d="M719.939,405.508v8.152c-7.737,0.015-14.042,6.154-14.322,13.823v23.319h-8.179v-45.294h8.179v5.171
C709.504,407.452,714.495,405.516,719.939,405.508z"/>
<path fill="#07242D" d="M766.789,428.12v22.682h-22.705c-0.499,0-0.999-0.015-1.494-0.054c-6.431-0.423-12.128-3.527-15.985-8.214
c-3.289-4.003-5.171-8.928-5.183-14.414c0.523-25.548,35.102-31.264,44.026-7.699C766.335,422.88,766.789,425.508,766.789,428.12z
M758.398,428.12c0.054-12.824-15.563-19.132-24.433-10.135l-0.004-0.008c-2.609,2.605-4.226,6.17-4.226,10.142
c0,7.937,6.435,14.399,14.368,14.399c3.976,0,14.295,0,14.295,0S758.398,432.101,758.398,428.12z"/>
<path fill="#07242D" d="M805.36,438.37l5.801,5.801c-4.099,4.095-9.762,6.631-16.016,6.631c-6.254,0-11.913-2.536-16.012-6.631
c-4.099-4.103-6.631-9.766-6.631-16.02c0-6.247,2.532-11.909,6.631-16.012c4.099-4.095,9.758-6.631,16.012-6.631
c6.254,0,11.917,2.536,16.016,6.631l-5.801,5.801c-2.612-2.612-6.224-4.234-10.215-4.234c-3.988,0-7.599,1.621-10.211,4.234
c-2.616,2.612-4.234,6.224-4.234,10.211c0,3.995,1.617,7.607,4.234,10.219c2.612,2.612,6.224,4.234,10.211,4.234
C799.136,442.604,802.747,440.983,805.36,438.37z"/>
<path fill="#07242D" d="M858.664,431.109h-36.527c1.375,6.516,7.161,11.433,14.08,11.433c4.514,0,8.54-2.098,11.172-5.363h9.581
c-3.5,8.014-11.479,13.623-20.753,13.623c-12.493,0-22.647-10.173-22.647-22.682c0-12.501,10.154-22.612,22.647-22.612
C849.774,405.4,860.539,417.679,858.664,431.109z M849.59,422.842c-2.105-5.317-7.295-9.059-13.373-9.059
s-11.276,3.742-13.385,9.059H849.59z"/>
<path fill="#07242D" d="M908.514,431.109h-36.527c1.375,6.516,7.161,11.433,14.08,11.433c4.514,0,8.54-2.098,11.172-5.363h9.581
c-3.5,8.014-11.479,13.623-20.753,13.623c-12.493,0-22.647-10.173-22.647-22.682c0-12.501,10.154-22.612,22.647-22.612
C899.625,405.4,910.389,417.679,908.514,431.109z M899.44,422.842c-2.105-5.317-7.295-9.059-13.373-9.059
s-11.276,3.742-13.385,9.059H899.44z"/>
</g>
</g>
<g>
<path fill="#07242D" d="M186.351,471.553v8.229c-5.606,0-10.656-2.019-14.639-5.363c-5.005-4.199-8.182-10.502-8.182-17.544v-41.21
h8.182v18.699h14.639v8.282h-14.639v14.43C171.824,465.089,178.316,471.553,186.351,471.553z"/>
<path fill="#07242D" d="M215.533,434.363v8.175c-7.762,0.016-14.08,6.172-14.361,13.86v23.384h-8.202v-45.419h8.202v5.185
C205.069,436.313,210.074,434.371,215.533,434.363z"/>
<path fill="#07242D" d="M220.803,423.832v-8.191h8.186v8.191H220.803z M220.803,479.782v-45.419h8.186v45.419H220.803z"/>
<path fill="#07242D" d="M279.191,434.363l-22.694,45.419l-22.716-45.419h9.3l13.417,26.82l13.39-26.82H279.191z"/>
<path fill="#07242D" d="M328.286,434.363c0,0,0,49.656,0,52.938c0,12.682-10.402,22.805-22.725,22.798
c-5.771,0-11.118-2.188-15.178-5.824l5.887-5.887c2.512,2.126,5.751,3.42,9.291,3.413c7.975,0,14.431-6.519,14.431-14.5v-12.689
c-3.956,3.275-9.006,5.17-14.431,5.17c-12.346,0.007-22.743-9.954-22.743-22.728c0-0.27,0-22.69,0-22.69h8.291
c0,0,0.004,22.082,0.004,22.69c0,7.944,6.468,14.508,14.45,14.5c7.975,0,14.431-6.526,14.431-14.5v-22.691H328.286z"/>
</g>
<g>
<polygon fill="#FFFFFF" points="250.554,44.159 116.876,121.396 116.877,277.11 250.537,354.962 384.229,277.154 384.229,121.392
"/>
<g>
<path fill="#1904DA" d="M246.902,255.524v-32.282c-14.609-6.898-23.783-21.236-23.594-36.882l-30.086-17.374
c-1.892,17.15,2.057,34.896,11.198,50.171C214.507,236.009,228.793,248.237,246.902,255.524z"/>
<path fill="#1904DA" d="M246.902,299.761v-37.468c-20.381-7.638-36.445-21.086-47.752-39.981
c-10.325-17.249-14.466-37.337-11.695-56.657l-27.931-16.129C143.482,211.352,180.751,275.442,246.902,299.761z"/>
<path fill="#08B1D5" d="M253.779,261.938v37.797c64.918-24.892,103.171-90.209,87.852-149.994l-27.747,16.165
c3.578,20.856,0.191,40.77-9.818,57.644C294.046,240.446,276.67,253.707,253.779,261.938z"/>
<path fill="#08B1D5" d="M253.779,223.185v32.371c20.424-7.774,35.964-19.9,45.004-35.138c8.877-14.969,12.116-32.637,9.411-51.205
l-30.06,17.33C277.985,201.395,269.156,214.685,253.779,223.185z"/>
<path fill="#FFC900" d="M282.1,131.138c12.628,6.157,22.948,15.961,29.885,28.378l27.012-15.598
c-0.182-0.255-0.351-0.51-0.509-0.764c-10.628-17.188-24.658-30.12-41.707-38.435c-47.439-23.13-106.339-5.896-134.71,39.2
l27.117,15.654C209.496,128.018,250.069,115.518,282.1,131.138z"/>
<path fill="#FFC900" d="M251.284,165.445c4.256,0,8.519,0.931,12.516,2.881h0.002c5.253,2.564,9.549,6.643,12.458,11.821
l30.404-17.558c-6.323-11.352-15.738-20.312-27.257-25.93c-29.172-14.223-66.203-2.802-84.893,25.99l30.251,17.46
C231.056,170.735,241.141,165.445,251.284,165.445z"/>
<path fill="#08B1D5" d="M253.779,347.086l125.184-72.957V127.993l-31.828,18.542c17.491,64.215-23.319,134.084-93.356,159.757
V347.086z"/>
<path fill="#1904DA" d="M154.014,146.345l-31.873-18.406v146.151l124.761,72.993v-40.779
C176.723,281.599,136.109,211.643,154.014,146.345z"/>
<path fill="#FFC900" d="M299.471,99.198c18.111,8.832,32.995,22.533,44.241,40.722c0.179,0.289,0.397,0.592,0.636,0.908
l31.536-18.21l-125.33-72.378l-125.358,72.395l31.548,18.211C186.722,92.98,249.169,74.667,299.471,99.198z"/>
<path fill="#FF0036" d="M271.797,187.57c0.002-0.035,0.052-1.226-0.036-3.143c-0.251-0.783-3.208-6.558-10.592-10.586
c-5.045-2.751-11.518-3.068-17.769-0.874c-6.124,2.152-11.322,6.434-14.303,11.769c-0.036,0.464-0.105,1.563-0.052,2.832
c0.404,9.974,6.573,23.534,19.156,29.736l1.938,0.925l1.682-0.899C264.046,210.487,271.328,199.641,271.797,187.57z"/>
</g>
</g>
<g>
<path fill="#07242D" d="M186.846,398.474H175.2c-6.421,0-11.646-5.224-11.646-11.646c0-6.422,5.224-11.646,11.646-11.646
s11.646,5.224,11.646,11.646V398.474z M175.2,379.912c-3.814,0-6.916,3.103-6.916,6.916c0,3.814,3.103,6.916,6.916,6.916h6.916
v-6.916C182.117,383.015,179.014,379.912,175.2,379.912z"/>
<path fill="#07242D" d="M264.991,398.474h-11.646c-6.421,0-11.646-5.224-11.646-11.646c0-6.422,5.224-11.646,11.646-11.646
c6.421,0,11.646,5.224,11.646,11.646V398.474z M253.345,379.912c-3.814,0-6.916,3.103-6.916,6.916c0,3.814,3.103,6.916,6.916,6.916
h6.916v-6.916C260.261,383.015,257.159,379.912,253.345,379.912z"/>
<path fill="#07242D" d="M227.295,398.479c-6.424,0-11.651-5.226-11.651-11.651V375.9h4.731v10.928c0,3.815,3.104,6.919,6.919,6.919
c3.815,0,6.919-3.104,6.919-6.919V375.9h4.731v10.928C238.946,393.253,233.719,398.479,227.295,398.479z"/>
<path fill="#07242D" d="M201.245,375.183c-6.421,0-11.645,5.224-11.645,11.646c0,6.421,5.224,11.646,11.645,11.646l4.729-4.729
h-4.729c-3.814,0-6.916-3.103-6.916-6.916c0-3.814,3.103-6.916,6.916-6.916c3.814,0,6.916,3.103,6.916,6.916v22.76h4.729v-22.76
C212.891,380.407,207.666,375.183,201.245,375.183z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

View File

@@ -0,0 +1,84 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="_x30_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 265 135" enable-background="new 0 0 265 135" xml:space="preserve">
<g display="none">
<polygon display="inline" fill="#FFFFFF" points="65.469,9.61 12.669,40.117 12.669,101.621 65.463,132.371 118.268,101.639
118.268,40.115 "/>
<g display="inline">
<path fill="#08B1D5" d="M64.511,80.035c-5.972-2.687-9.502-8.433-9.313-14.534l-12.765-7.371c-0.952,7.062,0.569,14.449,4.4,20.85
c4.078,6.813,9.966,11.887,17.678,14.825V80.035L64.511,80.035z"/>
<path fill="#08B1D5" d="M64.511,111.257V95.432c-8.26-3.017-14.588-8.448-18.931-15.703c-4.108-6.864-5.671-14.819-4.507-22.384
l-11.864-6.851C22.412,75.299,37.662,101.72,64.511,111.257z"/>
<path fill="#0D819B" d="M66.259,95.288v15.969c26.352-9.758,42.17-36.132,35.489-60.682l-11.8,6.874
c1.473,8.16,0.189,16.115-3.759,22.77C82.134,87.057,75.052,92.189,66.259,95.288z"/>
<path fill="#0D819B" d="M75.879,65.569c0.053,5.924-3.429,11.136-9.62,14.466v13.769c8.227-2.999,14.873-7.918,18.675-14.329
c3.681-6.207,4.934-13.613,3.671-21.243L75.879,65.569z"/>
<path fill="#F69421" d="M77.717,44.4c4.977,2.427,9.031,6.315,11.724,11.244c0.035,0.065,0.069,0.132,0.104,0.198l11.574-6.684
c-0.184-0.232-0.361-0.466-0.506-0.701c-4.246-6.868-9.855-12.036-16.673-15.361c-19.245-9.385-42.827-2.309-54.094,16.087
l11.546,6.665C49.232,43.242,65.013,38.204,77.717,44.4z"/>
<path fill="#F69421" d="M70.489,59.089c2.06,1.005,3.731,2.627,4.832,4.692c0.037,0.07,0.07,0.143,0.105,0.214l12.854-7.423
c-0.04-0.076-0.079-0.153-0.12-0.228c-2.546-4.662-6.379-8.339-11.082-10.632c-12.018-5.861-26.965-1.08-34.421,10.866
l12.783,7.379C58.771,58.613,65.217,56.518,70.489,59.089z"/>
<path fill="#0D819B" d="M116.672,41.881l-13.621,7.936c7.185,25.544-9.291,53.076-36.791,62.992v17.294l50.413-29.381V41.881z"/>
<path fill="#08B1D5" d="M14.265,41.864v58.842l50.245,29.397v-17.294C36.51,103.127,20.607,75.545,27.905,49.74l-13.001-7.508
L14.265,41.864z"/>
<path fill="#F69421" d="M14.987,40.606l1.484,0.857l12.109,6.989C40.23,29.398,64.649,22.066,84.579,31.784
c7.069,3.448,12.881,8.799,17.274,15.904c0.139,0.225,0.333,0.472,0.543,0.731l13.542-7.82l-50.47-29.146L14.987,40.606z"/>
<path fill="#F0DF36" d="M66.202,78.433c4.968-2.778,7.95-7.226,8.141-12.159c0,0,0.022-0.489-0.015-1.283
c-0.007-0.163-1.102-2.766-4.435-4.583c-4.476-2.441-10.828-0.093-13.372,4.583c0,0-0.061,0.574-0.033,1.283
c0.182,4.483,2.945,9.749,7.836,12.159l0.991,0.473L66.202,78.433z"/>
</g>
</g>
<g>
<path fill="#FFFFFF" d="M148.629,103.076v5.928c-4.038,0-7.676-1.454-10.545-3.863c-3.605-3.025-5.894-7.565-5.894-12.638V62.815
h5.894v13.471h10.545v5.966h-10.545v10.395C138.164,98.419,142.84,103.076,148.629,103.076z"/>
<path fill="#FFFFFF" d="M169.65,76.285v5.889c-5.591,0.011-10.143,4.446-10.345,9.984v16.845h-5.908V76.285h5.908v3.735
C162.113,77.689,165.718,76.291,169.65,76.285z"/>
<path fill="#FFFFFF" d="M173.447,68.698v-5.9h5.897v5.9H173.447z M173.447,109.003V76.285h5.897v32.719H173.447z"/>
<path fill="#FFFFFF" d="M215.508,76.285l-16.348,32.719l-16.364-32.719h6.699l9.665,19.32l9.646-19.32L215.508,76.285z"/>
<path fill="#FFFFFF" d="M250.874,76.285c0,0,0,35.771,0,38.135c0,9.136-7.493,16.428-16.37,16.423
c-4.157,0-8.009-1.576-10.934-4.196l4.24-4.24c1.809,1.532,4.143,2.464,6.693,2.459c5.745,0,10.396-4.696,10.396-10.446v-9.141
c-2.85,2.359-6.488,3.724-10.396,3.724c-8.894,0.005-16.384-7.171-16.384-16.372c0-0.194,0-16.345,0-16.345h5.972
c0,0,0.003,15.907,0.003,16.345c0,5.722,4.659,10.451,10.409,10.446c5.745,0,10.396-4.701,10.396-10.446V76.285H250.874z"/>
</g>
<g>
<polygon fill="#FFFFFF" points="65.469,5.431 10.124,37.409 10.125,101.877 65.462,134.109 120.813,101.895 120.813,37.407 "/>
<g>
<path fill="#1904DA" d="M63.957,92.94V79.575c-6.048-2.856-9.846-8.792-9.768-15.27l-12.456-7.193
c-0.783,7.101,0.852,14.447,4.636,20.771C50.545,84.86,56.46,89.923,63.957,92.94z"/>
<path fill="#1904DA" d="M63.957,111.255V95.742c-8.438-3.162-15.089-8.73-19.77-16.553c-4.275-7.141-5.989-15.458-4.842-23.457
l-11.564-6.678C21.14,74.652,36.57,101.186,63.957,111.255z"/>
<path fill="#08B1D5" d="M66.804,95.596v15.649c26.877-10.306,42.715-37.348,36.372-62.1l-11.488,6.693
c1.481,8.635,0.079,16.879-4.065,23.865C83.476,86.697,76.281,92.188,66.804,95.596z"/>
<path fill="#08B1D5" d="M66.804,79.551v13.402c8.456-3.219,14.89-8.239,18.632-14.548c3.675-6.197,5.016-13.512,3.896-21.2
L76.888,64.38C76.826,70.53,73.171,76.032,66.804,79.551z"/>
<path fill="#FFC900" d="M78.53,41.442c5.228,2.549,9.501,6.608,12.373,11.749l11.183-6.458c-0.075-0.105-0.146-0.211-0.211-0.316
c-4.4-7.116-10.209-12.47-17.267-15.913c-19.641-9.576-44.026-2.441-55.772,16.23l11.227,6.481
C48.47,40.15,65.268,34.975,78.53,41.442z"/>
<path fill="#FFC900" d="M65.771,55.646c1.762,0,3.527,0.385,5.182,1.193h0.001c2.175,1.062,3.954,2.75,5.158,4.894L88.7,54.463
c-2.618-4.7-6.516-8.409-11.285-10.735c-12.078-5.888-27.409-1.16-35.147,10.76l12.525,7.229
C57.397,57.836,61.572,55.646,65.771,55.646z"/>
<path fill="#08B1D5" d="M66.804,130.848l51.828-30.205V40.14l-13.177,7.677c7.242,26.586-9.654,55.513-38.651,66.142V130.848z"/>
<path fill="#1904DA" d="M25.5,47.738l-13.196-7.621v60.509l51.653,30.22v-16.883C34.902,103.736,18.087,74.773,25.5,47.738z"/>
<path fill="#FFC900" d="M85.722,28.218c7.498,3.656,13.661,9.329,18.316,16.859c0.074,0.12,0.164,0.245,0.263,0.376l13.056-7.539
L65.469,7.948l-51.9,29.973l13.061,7.54C39.042,25.644,64.896,18.062,85.722,28.218z"/>
<path fill="#FF0036" d="M74.264,64.806c0.001-0.014,0.022-0.508-0.015-1.301c-0.104-0.324-1.328-2.715-4.385-4.383
c-2.089-1.139-4.769-1.27-7.357-0.362c-2.536,0.891-4.688,2.664-5.922,4.873c-0.015,0.192-0.044,0.647-0.022,1.173
c0.167,4.129,2.721,9.743,7.931,12.311l0.802,0.383l0.696-0.372C71.055,74.294,74.07,69.803,74.264,64.806z"/>
</g>
</g>
<g>
<path fill="#FFFFFF" d="M149.768,48.152h-8.789c-4.846,0-8.789-3.943-8.789-8.789c0-4.846,3.943-8.789,8.789-8.789
s8.789,3.943,8.789,8.789V48.152z M140.979,34.143c-2.878,0-5.22,2.342-5.22,5.22c0,2.878,2.342,5.22,5.22,5.22h5.22v-5.22
C146.199,36.485,143.858,34.143,140.979,34.143z"/>
<path fill="#FFFFFF" d="M208.745,48.152h-8.789c-4.846,0-8.789-3.943-8.789-8.789c0-4.846,3.943-8.789,8.789-8.789
c4.846,0,8.789,3.943,8.789,8.789V48.152z M199.956,34.143c-2.878,0-5.22,2.342-5.22,5.22c0,2.878,2.342,5.22,5.22,5.22h5.22v-5.22
C205.176,36.485,202.835,34.143,199.956,34.143z"/>
<path fill="#FFFFFF" d="M180.296,48.156c-4.848,0-8.793-3.944-8.793-8.793v-8.248h3.571v8.248c0,2.879,2.343,5.222,5.222,5.222
c2.879,0,5.222-2.343,5.222-5.222v-8.248h3.571v8.248C189.089,44.211,185.144,48.156,180.296,48.156z"/>
<path fill="#FFFFFF" d="M160.636,30.574c-4.846,0-8.789,3.943-8.789,8.789c0,4.846,3.943,8.789,8.789,8.789l3.569-3.569h-3.569
c-2.878,0-5.22-2.342-5.22-5.22c0-2.878,2.342-5.22,5.22-5.22c2.878,0,5.22,2.342,5.22,5.22V56.54h3.569V39.363
C169.425,34.516,165.482,30.574,160.636,30.574z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 80 KiB

View File

@@ -0,0 +1,59 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 26.3.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="_x30_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
viewBox="0 0 500 524" enable-background="new 0 0 500 524" xml:space="preserve">
<g>
<path fill="#FFFFFF" d="M186.351,471.553v8.229c-5.606,0-10.656-2.019-14.639-5.363c-5.005-4.199-8.182-10.502-8.182-17.544v-41.21
h8.182v18.699h14.639v8.282h-14.639v14.43C171.824,465.089,178.316,471.553,186.351,471.553z"/>
<path fill="#FFFFFF" d="M215.533,434.363v8.175c-7.762,0.016-14.08,6.172-14.361,13.86v23.384h-8.202v-45.419h8.202v5.185
C205.069,436.313,210.074,434.371,215.533,434.363z"/>
<path fill="#FFFFFF" d="M220.803,423.832v-8.191h8.186v8.191H220.803z M220.803,479.782v-45.419h8.186v45.419H220.803z"/>
<path fill="#FFFFFF" d="M279.191,434.363l-22.694,45.419l-22.716-45.419h9.3l13.417,26.82l13.39-26.82H279.191z"/>
<path fill="#FFFFFF" d="M328.286,434.363c0,0,0,49.656,0,52.938c0,12.682-10.402,22.805-22.725,22.798
c-5.771,0-11.118-2.188-15.178-5.824l5.887-5.887c2.512,2.126,5.751,3.42,9.291,3.413c7.975,0,14.431-6.519,14.431-14.5v-12.689
c-3.956,3.275-9.006,5.17-14.431,5.17c-12.346,0.007-22.743-9.954-22.743-22.728c0-0.27,0-22.69,0-22.69h8.291
c0,0,0.004,22.082,0.004,22.69c0,7.944,6.468,14.508,14.45,14.5c7.975,0,14.431-6.526,14.431-14.5v-22.691H328.286z"/>
</g>
<g>
<polygon fill="#FFFFFF" points="250.554,44.159 116.876,121.396 116.877,277.11 250.537,354.962 384.229,277.154 384.229,121.392
"/>
<g>
<path fill="#1904DA" d="M246.902,255.524v-32.282c-14.609-6.898-23.783-21.236-23.594-36.882l-30.086-17.374
c-1.892,17.15,2.057,34.896,11.198,50.171C214.507,236.009,228.793,248.237,246.902,255.524z"/>
<path fill="#1904DA" d="M246.902,299.761v-37.468c-20.381-7.638-36.445-21.086-47.752-39.981
c-10.325-17.249-14.466-37.337-11.695-56.657l-27.931-16.129C143.482,211.352,180.751,275.442,246.902,299.761z"/>
<path fill="#08B1D5" d="M253.779,261.938v37.797c64.918-24.892,103.171-90.209,87.852-149.994l-27.747,16.165
c3.578,20.856,0.191,40.77-9.818,57.644C294.046,240.446,276.67,253.707,253.779,261.938z"/>
<path fill="#08B1D5" d="M253.779,223.185v32.371c20.424-7.774,35.964-19.9,45.004-35.138c8.877-14.969,12.116-32.637,9.411-51.205
l-30.06,17.33C277.985,201.395,269.156,214.685,253.779,223.185z"/>
<path fill="#FFC900" d="M282.1,131.138c12.628,6.157,22.948,15.961,29.885,28.378l27.012-15.598
c-0.182-0.255-0.351-0.51-0.509-0.764c-10.628-17.188-24.658-30.12-41.707-38.435c-47.439-23.13-106.339-5.896-134.71,39.2
l27.117,15.654C209.496,128.018,250.069,115.518,282.1,131.138z"/>
<path fill="#FFC900" d="M251.284,165.445c4.256,0,8.519,0.931,12.516,2.881h0.002c5.253,2.564,9.549,6.643,12.458,11.821
l30.404-17.558c-6.323-11.352-15.738-20.312-27.257-25.93c-29.172-14.223-66.203-2.802-84.893,25.99l30.251,17.46
C231.056,170.735,241.141,165.445,251.284,165.445z"/>
<path fill="#08B1D5" d="M253.779,347.086l125.184-72.957V127.993l-31.828,18.542c17.491,64.215-23.319,134.084-93.356,159.757
V347.086z"/>
<path fill="#1904DA" d="M154.014,146.345l-31.873-18.406v146.151l124.761,72.993v-40.779
C176.723,281.599,136.109,211.643,154.014,146.345z"/>
<path fill="#FFC900" d="M299.471,99.198c18.111,8.832,32.995,22.533,44.241,40.722c0.179,0.289,0.397,0.592,0.636,0.908
l31.536-18.21l-125.33-72.378l-125.358,72.395l31.548,18.211C186.722,92.98,249.169,74.667,299.471,99.198z"/>
<path fill="#FF0036" d="M271.797,187.57c0.002-0.035,0.052-1.226-0.036-3.143c-0.251-0.783-3.208-6.558-10.592-10.586
c-5.045-2.751-11.518-3.068-17.769-0.874c-6.124,2.152-11.322,6.434-14.303,11.769c-0.036,0.464-0.105,1.563-0.052,2.832
c0.404,9.974,6.573,23.534,19.156,29.736l1.938,0.925l1.682-0.899C264.046,210.487,271.328,199.641,271.797,187.57z"/>
</g>
</g>
<g>
<path fill="#FFFFFF" d="M186.846,398.474H175.2c-6.421,0-11.646-5.224-11.646-11.646c0-6.422,5.224-11.646,11.646-11.646
s11.646,5.224,11.646,11.646V398.474z M175.2,379.912c-3.814,0-6.916,3.103-6.916,6.916c0,3.814,3.103,6.916,6.916,6.916h6.916
v-6.916C182.117,383.015,179.014,379.912,175.2,379.912z"/>
<path fill="#FFFFFF" d="M264.991,398.474h-11.646c-6.421,0-11.646-5.224-11.646-11.646c0-6.422,5.224-11.646,11.646-11.646
c6.421,0,11.646,5.224,11.646,11.646V398.474z M253.345,379.912c-3.814,0-6.916,3.103-6.916,6.916c0,3.814,3.103,6.916,6.916,6.916
h6.916v-6.916C260.261,383.015,257.159,379.912,253.345,379.912z"/>
<path fill="#FFFFFF" d="M227.295,398.479c-6.424,0-11.651-5.226-11.651-11.651V375.9h4.731v10.928c0,3.815,3.104,6.919,6.919,6.919
c3.815,0,6.919-3.104,6.919-6.919V375.9h4.731v10.928C238.946,393.253,233.719,398.479,227.295,398.479z"/>
<path fill="#FFFFFF" d="M201.245,375.183c-6.421,0-11.645,5.224-11.645,11.646c0,6.421,5.224,11.646,11.645,11.646l4.729-4.729
h-4.729c-3.814,0-6.916-3.103-6.916-6.916c0-3.814,3.103-6.916,6.916-6.916c3.814,0,6.916,3.103,6.916,6.916v22.76h4.729v-22.76
C212.891,380.407,207.666,375.183,201.245,375.183z"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.9 KiB

2
brand/readme.md Normal file
View File

@@ -0,0 +1,2 @@
This directory contains media assets, such as the Trivy logo.
Assets under this directory are provided under the Creative Commons - BY 4.0 License. For more details, see here: <https://creativecommons.org/licenses/by/4.0/>

View File

@@ -15,7 +15,7 @@ function create_rpm_repo () {
cd trivy-repo
VERSIONS=(5 6 7 8)
VERSIONS=(5 6 7 8 9)
for version in ${VERSIONS[@]}; do
echo "Processing RHEL/CentOS $version..."
create_rpm_repo $version

View File

@@ -1,10 +1,14 @@
package main
import (
"context"
"os"
"golang.org/x/xerrors"
"github.com/aquasecurity/trivy/pkg/commands"
"github.com/aquasecurity/trivy/pkg/log"
"github.com/aquasecurity/trivy/pkg/plugin"
)
var (
@@ -12,9 +16,26 @@ var (
)
func main() {
app := commands.NewApp(version)
err := app.Run(os.Args)
if err != nil {
if err := run(); err != nil {
log.Fatal(err)
}
}
func run() error {
// Trivy behaves as the specified plugin.
if runAsPlugin := os.Getenv("TRIVY_RUN_AS_PLUGIN"); runAsPlugin != "" {
if !plugin.IsPredefined(runAsPlugin) {
return xerrors.Errorf("unknown plugin: %s", runAsPlugin)
}
if err := plugin.RunWithArgs(context.Background(), runAsPlugin, os.Args[1:]); err != nil {
return xerrors.Errorf("plugin error: %w", err)
}
return nil
}
app := commands.NewApp(version)
if err := app.Execute(); err != nil {
return err
}
return nil
}

View File

@@ -17,9 +17,9 @@
{{- if eq $severity "UNKNOWN" -}}
{{- $severity = "INFORMATIONAL" -}}
{{- end -}}
{{- $description := escapeString .Description | printf "%q" -}}
{{- if gt (len $description ) 1021 -}}
{{- $description = (substr 0 1021 $description) | printf "%v .." -}}
{{- $description := .Description -}}
{{- if gt (len $description ) 512 -}}
{{- $description = (substr 0 512 $description) | printf "%v .." -}}
{{- end}}
{
"SchemaVersion": "2018-10-08",
@@ -34,13 +34,15 @@
"Label": "{{ $severity }}"
},
"Title": "Trivy found a vulnerability to {{ .VulnerabilityID }} in container {{ $target }}",
"Description": {{ $description }},
"Description": {{ escapeString $description | printf "%q" }},
{{ if not (empty .PrimaryURL) -}}
"Remediation": {
"Recommendation": {
"Text": "More information on this vulnerability is provided in the hyperlink",
"Url": "{{ .PrimaryURL }}"
}
},
{{ end -}}
"ProductFields": { "Product Name": "Trivy" },
"Resources": [
{
@@ -66,7 +68,94 @@
],
"RecordState": "ACTIVE"
}
{{- end -}}
{{- end -}}
{{- range .Misconfigurations -}}
{{- if $t_first -}}{{- $t_first = false -}}{{- else -}},{{- end -}}
{{- $severity := .Severity -}}
{{- if eq $severity "UNKNOWN" -}}
{{- $severity = "INFORMATIONAL" -}}
{{- end -}}
{{- $description := .Description -}}
{{- if gt (len $description ) 512 -}}
{{- $description = (substr 0 512 $description) | printf "%v .." -}}
{{- end}}
{
"SchemaVersion": "2018-10-08",
"Id": "{{ $target }}/{{ .ID }}",
"ProductArn": "arn:aws:securityhub:{{ env "AWS_REGION" }}::product/aquasecurity/aquasecurity",
"GeneratorId": "Trivy/{{ .ID }}",
"AwsAccountId": "{{ env "AWS_ACCOUNT_ID" }}",
"Types": [ "Software and Configuration Checks" ],
"CreatedAt": "{{ now | date "2006-01-02T15:04:05.999999999Z07:00" }}",
"UpdatedAt": "{{ now | date "2006-01-02T15:04:05.999999999Z07:00" }}",
"Severity": {
"Label": "{{ $severity }}"
},
"Title": "Trivy found a misconfiguration in {{ $target }}: {{ .Title }}",
"Description": {{ escapeString $description | printf "%q" }},
"Remediation": {
"Recommendation": {
"Text": "{{ .Resolution }}",
"Url": "{{ .PrimaryURL }}"
}
},
"ProductFields": { "Product Name": "Trivy" },
"Resources": [
{
"Type": "Other",
"Id": "{{ $target }}",
"Partition": "aws",
"Region": "{{ env "AWS_REGION" }}",
"Details": {
"Other": {
"Message": "{{ .Message }}",
"Filename": "{{ $target }}",
"StartLine": "{{ .CauseMetadata.StartLine }}",
"EndLine": "{{ .CauseMetadata.EndLine }}"
}
}
}
],
"RecordState": "ACTIVE"
}
{{- end -}}
{{- range .Secrets -}}
{{- if $t_first -}}{{- $t_first = false -}}{{- else -}},{{- end -}}
{{- $severity := .Severity -}}
{{- if eq $severity "UNKNOWN" -}}
{{- $severity = "INFORMATIONAL" -}}
{{- end -}}
{
"SchemaVersion": "2018-10-08",
"Id": "{{ $target }}",
"ProductArn": "arn:aws:securityhub:{{ env "AWS_DEFAULT_REGION" }}::product/aquasecurity/aquasecurity",
"GeneratorId": "Trivy",
"AwsAccountId": "{{ env "AWS_ACCOUNT_ID" }}",
"Types": [ "Sensitive Data Identifications" ],
"CreatedAt": "{{ now | date "2006-01-02T15:04:05.999999999Z07:00" }}",
"UpdatedAt": "{{ now | date "2006-01-02T15:04:05.999999999Z07:00" }}",
"Severity": {
"Label": "{{ $severity }}"
},
"Title": "Trivy found a secret in {{ $target }}: {{ .Title }}",
"Description": "Trivy found a secret in {{ $target }}: {{ .Title }}",
"ProductFields": { "Product Name": "Trivy" },
"Resources": [
{
"Type": "Other",
"Id": "{{ $target }}",
"Partition": "aws",
"Region": "{{ env "AWS_DEFAULT_REGION" }}",
"Details": {
"Other": {
"Filename": "{{ $target }}"
}
}
}
],
"RecordState": "ACTIVE"
}
{{- end -}}
{{- end }}
]
}

View File

@@ -45,7 +45,7 @@
"type": "issue",
"check_name": "container_scanning",
"categories": [ "Security" ],
"description": {{ list .ID .Title | join ": " | printf "%q" }},
"description": {{ list "Misconfig" .ID .Title | join " - " | printf "%q" }},
"fingerprint": "{{ list .ID .Title $target | join "" | sha1sum }}",
"content": {{ .Description | printf "%q" }},
"severity": {{ if eq .Severity "LOW" -}}
@@ -62,7 +62,39 @@
"location": {
"path": "{{ $target }}",
"lines": {
"begin": {{ .IacMetadata.StartLine }}
"begin": {{ .CauseMetadata.StartLine }}
}
}
}
{{- end -}}
{{- range .Secrets -}}
{{- if $t_first -}}
{{- $t_first = false -}}
{{ else -}}
,
{{- end }}
{
"type": "issue",
"check_name": "container_scanning",
"categories": [ "Security" ],
"description": {{ list "Secret" .RuleID .Title | join " - " | printf "%q" }},
"fingerprint": "{{ list .RuleID .Title $target | join "" | sha1sum }}",
"content": {{ .Title | printf "%q" }},
"severity": {{ if eq .Severity "LOW" -}}
"info"
{{- else if eq .Severity "MEDIUM" -}}
"minor"
{{- else if eq .Severity "HIGH" -}}
"major"
{{- else if eq .Severity "CRITICAL" -}}
"critical"
{{- else -}}
"info"
{{- end }},
"location": {
"path": "{{ $target }}",
"lines": {
"begin": {{ .StartLine }}
}
}
}

View File

@@ -1,10 +1,11 @@
{{- /* Template based on https://docs.gitlab.com/ee/user/application_security/container_scanning/#reports-json-format */ -}}
{
"version": "2.3",
"version": "14.0.6",
"vulnerabilities": [
{{- $t_first := true }}
{{- range . }}
{{- $target := .Target }}
{{- $image := $target | regexFind "[^\\s]+" }}
{{- range .Vulnerabilities -}}
{{- if $t_first -}}
{{- $t_first = false -}}
@@ -31,8 +32,6 @@
{{- else -}}
"{{ .Severity }}"
{{- end }},
{{- /* TODO: Define confidence */}}
"confidence": "Unknown",
"solution": {{ if .FixedVersion -}}
"Upgrade {{ .PkgName }} to {{ .FixedVersion }}"
{{- else -}}
@@ -51,7 +50,7 @@
},
{{- /* TODO: No mapping available - https://github.com/aquasecurity/trivy/issues/332 */}}
"operating_system": "Unknown",
"image": "{{ $target }}"
"image": "{{ $image }}"
},
"identifiers": [
{
@@ -71,7 +70,7 @@
,
{{- end -}}
{
"url": "{{ . }}"
"url": "{{ regexFind "[^ ]+" . }}"
}
{{- end }}
]

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" ?>
<testsuites>
<testsuites name="trivy">
{{- range . -}}
{{- $failures := len .Vulnerabilities }}
<testsuite tests="{{ $failures }}" failures="{{ $failures }}" name="{{ .Target }}" errors="0" skipped="0" time="">
@@ -28,4 +28,4 @@
{{- end }}
</testsuite>
{{- end }}
</testsuites>
</testsuites>

View File

@@ -1,4 +1,4 @@
FROM squidfunk/mkdocs-material:7.0.6
FROM squidfunk/mkdocs-material:8.3.9
## If you want to see exactly the same version as is published to GitHub pages
## use a private image for insiders, which requires authentication.
@@ -6,4 +6,5 @@ FROM squidfunk/mkdocs-material:7.0.6
# docker login -u ${GITHUB_USERNAME} -p ${GITHUB_TOKEN} ghcr.io
# FROM ghcr.io/squidfunk/mkdocs-material-insiders
RUN pip install mike mkdocs-macros-plugin
COPY requirements.txt .
RUN pip install -r requirements.txt

30
docs/build/requirements.txt vendored Normal file
View File

@@ -0,0 +1,30 @@
click==8.1.2
csscompressor==0.9.5
ghp-import==2.0.2
htmlmin==0.1.12
importlib-metadata==4.11.3
Jinja2==3.1.1
jsmin==3.0.1
Markdown==3.3.6
MarkupSafe==2.1.1
mergedeep==1.3.4
mike==1.1.2
mkdocs==1.3.0
mkdocs-macros-plugin==0.7.0
mkdocs-material==8.3.9
mkdocs-material-extensions==1.0.3
mkdocs-minify-plugin==0.5.0
mkdocs-redirects==1.0.4
packaging==21.3
Pygments==2.12.0
pymdown-extensions==9.5
pyparsing==3.0.8
python-dateutil==2.8.2
PyYAML==6.0
pyyaml-env-tag==0.1
six==1.16.0
termcolor==1.1.0
verspec==0.1.0
watchdog==2.1.7
zipp==3.8.0

View File

@@ -42,6 +42,7 @@ checks:
- vuln
- misconf
- secret
- license
mode:
@@ -160,5 +161,4 @@ Trivy is composed of several repositories that work together:
- [vuln-list](https://github.com/aquasecurity/vuln-list) is a vulnerabilities database, aggregated from different sources, and normalized for easy consumption. Think of this as the "server" side of the trivy command line tool. **There should be no pull requests to this repo**
- [vuln-list-update](https://github.com/aquasecurity/vuln-list-update) is the code that maintains the vuln-list database.
- [trivy-db](https://github.com/aquasecurity/trivy-db) maintains the vulnerability database pulled by Trivy CLI.
- [fanal](https://github.com/aquasecurity/fanal) is a library for extracting system information from containers. It is being used by Trivy to find testable subjects in the container image.
- [go-dep-parser](https://github.com/aquasecurity/go-dep-parser) is a library for parsing lock files such as package-lock.json and Gemfile.lock.

View File

@@ -1,10 +0,0 @@
# Author
[Teppei Fukuda][knqyf263] (knqyf263)
# Contributors
Thanks to all [contributors][contributors]
[knqyf263]: https://github.com/knqyf263
[contributors]: https://github.com/aquasecurity/trivy/graphs/contributors

View File

@@ -188,7 +188,7 @@ We use two labels [help wanted](https://github.com/aquasecurity/trivy/issues?q=i
and [good first issue](https://github.com/aquasecurity/trivy/issues?q=is%3Aopen+is%3Aissue+label%3A%22good+first+issue%22)
to identify issues that have been specially groomed for new contributors.
We have specific [guidelines](/docs/docs/advanced/contribd/contrib/help-wanted.md)
We have specific [guidelines](/docs/community/maintainer/help-wanted.md)
for how to use these labels. If you see an issue that satisfies these
guidelines, you can add the `help wanted` label and the `good first issue` label.
Please note that adding the `good first issue` label must also

View File

@@ -1,48 +0,0 @@
# Additional References
There are external blogs and evaluations.
## Blogs
- [Trivy Vulnerability Scanner Joins the Aqua Open-source Family][join]
- [Trivy Image Vulnerability Scanner Now Under Apache 2.0 License][license]
- [DevSecOps with Trivy and GitHub Actions][actions]
- [Find Image Vulnerabilities Using GitHub and Aqua Security Trivy Action][actions2]
- [Using Trivy to Discover Vulnerabilities in VS Code Projects][vscode]
- [the vulnerability remediation lifecycle of Alpine containers][alpine]
- [Continuous Container Vulnerability Testing with Trivy][semaphore]
- [Open Source CVE Scanner Round-Up: Clair vs Anchore vs Trivy][round-up]
- [Docker Image Security: Static Analysis Tool Comparison Anchore Engine vs Clair vs Trivy][tool-comparison]
## Links
- [Research Spike: evaluate Trivy for scanning running containers][gitlab]
- [Istio evaluates scanners][istio]
## Presentations
- Aqua Security YouTube Channel
- [Trivy - container image scanning][intro]
- [Using Trivy in client server mode][server]
- [Tweaking Trivy output to fit your workflow][tweaking]
- [How does a vulnerability scanner identify packages?][identify]
- CNCF Webinar 2020
- [Trivy Open Source Scanner for Container Images Just Download and Run!][cncf]
- KubeCon + CloudNativeCon Europe 2020 Virtual
- [Handling Container Vulnerabilities with Open Policy Agent - Teppei Fukuda, Aqua Security][kubecon]
[alpine]: https://ariadne.space/2021/06/08/the-vulnerability-remediation-lifecycle-of-alpine-containers/
[semaphore]: https://semaphoreci.com/blog/continuous-container-vulnerability-testing-with-trivy
[round-up]: https://boxboat.com/2020/04/24/image-scanning-tech-compared/
[tool-comparison]: https://www.a10o.net/devsecops/docker-image-security-static-analysis-tool-comparison-anchore-engine-vs-clair-vs-trivy/
[gitlab]: https://gitlab.com/gitlab-org/gitlab/-/issues/270888
[istio]: https://github.com/istio/release-builder/pull/687#issuecomment-874938417
[intro]: https://www.youtube.com/watch?v=AzOBGm7XxOA
[cncf]: https://www.youtube.com/watch?v=XnYxX9uueoQ
[server]: https://www.youtube.com/watch?v=tNQ-VlahtYM
[kubecon]: https://www.youtube.com/watch?v=WKE2XNZ2zr4
[identify]: https://www.youtube.com/watch?v=PaMnzeHBa8M
[tweaking]: https://www.youtube.com/watch?v=wFIGUjcRLnU
[join]: https://blog.aquasec.com/trivy-vulnerability-scanner-joins-aqua-family
[license]: https://blog.aquasec.com/trivy-open-source-vulnerability-scanner-apache2.0-license
[actions]: https://blog.aquasec.com/devsecops-with-trivy-github-actions
[actions2]: https://blog.aquasec.com/github-vulnerability-scanner-trivy
[vscode]: https://blog.aquasec.com/trivy-open-source-vulnerability-scanner-vs-code

View File

@@ -1,37 +0,0 @@
# Community Tools
The open source community has been hard at work developing new tools for Trivy. You can check out some of them here.
Have you created a tool thats not listed? Add the name and description of your integration and open a pull request in the GitHub repository to get your change merged.
## GitHub Actions
| Actions | Description |
| ------------------------------------------ | -------------------------------------------------------------------------------- |
| [gitrivy][gitrivy] | GitHub Issue + Trivy |
| [trivy-github-issues][trivy-github-issues] | GitHub Actions for creating GitHub Issues according to the Trivy scanning result |
## Semaphore
| Name | Description |
| -------------------------------------------------------| ----------------------------------------- |
| [Continuous Vulnerability Testing with Trivy][semaphore-tutorial] | Tutorial on scanning code, containers, infrastructure, and Kubernetes with Semaphore CI/CD. |
## CircleCI
| Orb | Description |
| -----------------------------------------| ----------------------------------------- |
| [fifteen5/trivy-orb][fifteen5/trivy-orb] | Orb for running Trivy, a security scanner |
## Others
| Name | Description |
| -----------------------------------------| ----------------------------------------- |
| [Trivy Vulnerability Explorer][explorer] | Explore trivy vulnerability reports in your browser and create .trivyignore files interactively. Can be integrated in your CI/CD tooling with deep links. |
[trivy-github-issues]: https://github.com/marketplace/actions/trivy-github-issues
[fifteen5/trivy-orb]: https://circleci.com/developer/orbs/orb/fifteen5/trivy-orb
[gitrivy]: https://github.com/marketplace/actions/trivy-action
[explorer]: https://dbsystel.github.io/trivy-vulnerability-explorer/
[semaphore-tutorial]: https://semaphoreci.com/blog/continuous-container-vulnerability-testing-with-trivy

View File

@@ -5,14 +5,34 @@ Trivy can be used in air-gapped environments. Note that an allowlist is [here][a
## Air-Gapped Environment for vulnerabilities
### Download the vulnerability database
At first, you need to download the vulnerability database for use in air-gapped environments.
Please follow [oras installation instruction][oras].
=== "Trivy"
Download `db.tar.gz`:
```
TRIVY_TEMP_DIR=$(mktemp -d)
trivy --cache-dir $TRIVY_TEMP_DIR image --download-db-only
tar -cf ./db.tar.gz -C $TRIVY_TEMP_DIR/db metadata.json trivy.db
rm -rf $TRIVY_TEMP_DIR
```
```
$ oras pull ghcr.io/aquasecurity/trivy-db:2 -a
```
=== "oras >= v0.13.0"
At first, you need to download the vulnerability database for use in air-gapped environments.
Please follow [oras installation instruction][oras].
Download `db.tar.gz`:
```
$ oras pull ghcr.io/aquasecurity/trivy-db:2
```
=== "oras < v0.13.0"
At first, you need to download the vulnerability database for use in air-gapped environments.
Please follow [oras installation instruction][oras].
Download `db.tar.gz`:
```
$ oras pull -a ghcr.io/aquasecurity/trivy-db:2
```
### Transfer the DB file into the air-gapped environment
The way of transfer depends on the environment.
@@ -43,7 +63,7 @@ $ rm /path/to/db.tar.gz
In an air-gapped environment it is your responsibility to update the Trivy database on a regular basis, so that the scanner can detect recently-identified vulnerabilities.
### Run Trivy with --skip-update and --offline-scan option
### Run Trivy with `--skip-update` and `--offline-scan` option
In an air-gapped environment, specify `--skip-update` so that Trivy doesn't attempt to download the latest database file.
In addition, if you want to scan Java dependencies such as JAR and pom.xml, you need to specify `--offline-scan` since Trivy tries to issue API requests for scanning Java applications by default.
@@ -53,56 +73,9 @@ $ trivy image --skip-update --offline-scan alpine:3.12
## Air-Gapped Environment for misconfigurations
### Download misconfiguration policies
At first, you need to download misconfiguration policies for use in air-gapped environments.
Please follow [oras installation instruction][oras].
No special measures are required to detect misconfigurations in an air-gapped environment.
Download `bundle.tar.gz`:
```
$ oras pull ghcr.io/aquasecurity/appshield:latest -a
```
### Transfer misconfiguration policies into the air-gapped environment
The way of transfer depends on the environment.
```
$ rsync -av -e ssh /path/to/bundle.tar.gz [user]@[host]:dst
```
### Put the misconfiguration policies in Trivy's cache directory
You have to know where to put the misconfiguration policies file. The following command shows the default cache directory.
```
$ ssh user@host
$ trivy -h | grep cache
--cache-dir value cache directory (default: "/home/myuser/.cache/trivy") [$TRIVY_CACHE_DIR]
```
Put the misconfiguration policies file in the cache directory + `/policy/content`.
```
$ mkdir -p /home/myuser/.cache/trivy/policy/content
$ cd /home/myuser/.cache/trivy/policy/content
$ mv /path/to/bundle.tar.gz .
```
Then, decompress it.
`bundle.tar.gz ` file includes two folders: `docker`, `kubernetes` and file: `.manifest`.
```
$ tar xvf bundle.tar.gz
x ./docker/
...
x ./kubernetes/
...
x ./.manifest
$ rm bundle.tar.gz
```
In an air-gapped environment it is your responsibility to update policies on a regular basis, so that the scanner can detect recently-identified misconfigurations.
### Run Trivy with --skip-policy-update option
### Run Trivy with `--skip-policy-update` option
In an air-gapped environment, specify `--skip-policy-update` so that Trivy doesn't attempt to download the latest misconfiguration policies.
```

View File

@@ -0,0 +1,29 @@
# containerd
!!! warning "EXPERIMENTAL"
This feature might change without preserving backwards compatibility.
Scan your image in [containerd][containerd] running locally.
```bash
$ nerdctl images
REPOSITORY TAG IMAGE ID CREATED PLATFORM SIZE BLOB SIZE
aquasec/nginx latest 2bcabc23b454 3 hours ago linux/amd64 149.1 MiB 54.1 MiB
$ trivy image aquasec/nginx
```
If your containerd socket is not the default path (`//run/containerd/containerd.sock`), you can override it via `CONTAINERD_ADDRESS`.
```bash
$ export CONTAINERD_ADDRESS=/run/k3s/containerd/containerd.sock
$ trivy image aquasec/nginx
```
If your scan targets are images in a namespace other than containerd's default namespace (`default`), you can override it via `CONTAINERD_NAMESPACE`.
```bash
$ export CONTAINERD_NAMESPACE=k8s.io
$ trivy image aquasec/nginx
```
[containerd]: https://containerd.io/

View File

@@ -0,0 +1,358 @@
# Modules
!!! warning "EXPERIMENTAL"
This feature might change without preserving backwards compatibility.
Trivy provides a module feature to allow others to extend the Trivy CLI without the need to change the Trivy code base.
It changes the behavior during scanning by WebAssembly.
## Overview
Trivy modules are add-on tools that integrate seamlessly with Trivy.
They provide a way to extend the core feature set of Trivy, but without updating the Trivy binary.
- They can be added and removed from a Trivy installation without impacting the core Trivy tool.
- They can be written in any programming language supporting WebAssembly.
- It supports only [TinyGo][tinygo] at the moment.
You can write your own detection logic.
- Evaluate complex vulnerability conditions like [Spring4Shell][spring4shell]
- Detect a shell script communicating with malicious domains
- Detect malicious python install script (setup.py)
- Even detect misconfigurations in WordPress setting
- etc.
Then, you can update the scan result however you want.
- Change a severity
- Remove a vulnerability
- Add a new vulnerability
- etc.
Modules should be distributed in OCI registries like GitHub Container Registry.
!!! warning
WebAssembly doesn't allow file access and network access by default.
Modules can read required files only, but cannot overwrite them.
WebAssembly is sandboxed and secure by design, but Trivy modules available in public are not audited for security.
You should install and run third-party modules at your own risk even though
Under the hood Trivy leverages [wazero][wazero] to run WebAssembly modules without CGO.
## Installing a Module
A module can be installed using the `trivy module install` command.
This command takes an url. It will download the module and install it in the module cache.
Trivy adheres to the XDG specification, so the location depends on whether XDG_DATA_HOME is set.
Trivy will now search XDG_DATA_HOME for the location of the Trivy modules cache.
The preference order is as follows:
- XDG_DATA_HOME if set and .trivy/plugins exists within the XDG_DATA_HOME dir
- $HOME/.trivy/plugins
For example, to download the WebAssembly module, you can execute the following command:
```bash
$ trivy module install ghcr.io/aquasecurity/trivy-module-spring4shell
```
## Using Modules
Once the module is installed, Trivy will load all available modules in the cache on the start of the next Trivy execution.
The modules may inject custom logic into scanning and change the result.
You can run Trivy as usual and modules are loaded automatically.
You will see the log messages about WASM modules.
```shell
$ trivy image ghcr.io/aquasecurity/trivy-test-images:spring4shell-jre8
2022-06-12T12:57:13.210+0300 INFO Loading ghcr.io/aquasecurity/trivy-module-spring4shell/spring4shell.wasm...
2022-06-12T12:57:13.596+0300 INFO Registering WASM module: spring4shell@v1
...
2022-06-12T12:57:14.865+0300 INFO Module spring4shell: Java Version: 8, Tomcat Version: 8.5.77
2022-06-12T12:57:14.865+0300 INFO Module spring4shell: change CVE-2022-22965 severity from CRITICAL to LOW
Java (jar)
Total: 9 (UNKNOWN: 1, LOW: 3, MEDIUM: 2, HIGH: 3, CRITICAL: 0)
┌──────────────────────────────────────────────────────────────┬─────────────────────┬──────────┬───────────────────┬────────────────────────┬────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├──────────────────────────────────────────────────────────────┼─────────────────────┼──────────┼───────────────────┼────────────────────────┼────────────────────────────────────────────────────────────┤
│ org.springframework.boot:spring-boot (helloworld.war) │ CVE-2022-22965 │ LOW │ 2.6.3 │ 2.5.12, 2.6.6 │ spring-framework: RCE via Data Binding on JDK 9+ │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-22965 │
├──────────────────────────────────────────────────────────────┼─────────────────────┼──────────┼───────────────────┼────────────────────────┼────────────────────────────────────────────────────────────┤
...(snip)...
```
In the above example, the Spring4Shell module changed the severity from CRITICAL to LOW because the application doesn't satisfy one of conditions.
## Uninstalling Modules
Specify a module repository with `trivy module uninstall` command.
```bash
$ trivy module uninstall ghcr.io/aquasecurity/trivy-module-spring4shell
```
## Building Modules
It supports TinyGo only at the moment.
### TinyGo
Trivy provides Go SDK including three interfaces.
Your own module needs to implement either or both `Analyzer` and `PostScanner` in addition to `Module`.
```go
type Module interface {
Version() int
Name() string
}
type Analyzer interface {
RequiredFiles() []string
Analyze(filePath string) (*serialize.AnalysisResult, error)
}
type PostScanner interface {
PostScanSpec() serialize.PostScanSpec
PostScan(serialize.Results) (serialize.Results, error)
}
```
In the following tutorial, it creates a WordPress module that detects a WordPress version and a critical vulnerability accordingly.
!!! tips
You can use logging functions such as `Debug` and `Info` for debugging.
See [examples](#examples) for the detail.
#### Initialize your module
Replace the repository name with yours.
```
$ go mod init github.com/aquasecurity/trivy-module-wordpress
```
#### Module interface
`Version()` returns your module version and should be incremented after updates.
`Name()` returns your module name.
```go
package main
const (
version = 1
name = "wordpress-module"
)
type WordpressModule struct{
// Cannot define fields as modules can't keep state.
}
func (WordpressModule) Version() int {
return version
}
func (WordpressModule) Name() string {
return name
}
```
!!! info
A struct cannot have any fields. Each method invocation is performed in different states.
#### Analyzer interface
If you implement the `Analyzer` interface, `Analyze` method is called when the file path is matched to file patterns returned by `RequiredFiles()`.
A file pattern must be a regular expression. The syntax detail is [here][regexp].
`Analyze` takes the matched file path, then the file can be opened by `os.Open()`.
```go
const typeWPVersion = "wordpress-version"
func (WordpressModule) RequiredFiles() []string {
return []string{
`wp-includes\/version.php`,
}
}
func (WordpressModule) Analyze(filePath string) (*serialize.AnalysisResult, error) {
f, err := os.Open(filePath) // e.g. filePath: /usr/src/wordpress/wp-includes/version.php
if err != nil {
return nil, err
}
defer f.Close()
var wpVersion string
scanner := bufio.NewScanner(f)
for scanner.Scan() {
line := scanner.Text()
if !strings.HasPrefix(line, "$wp_version=") {
continue
}
ss := strings.Split(line, "=")
if len(ss) != 2 {
return nil, fmt.Errorf("invalid wordpress version: %s", line)
}
// NOTE: it is an example; you actually need to handle comments, etc
ss[1] = strings.TrimSpace(ss[1])
wpVersion = strings.Trim(ss[1], `";`)
}
if err = scanner.Err(); err != nil {
return nil, err
}
return &serialize.AnalysisResult{
CustomResources: []serialize.CustomResource{
{
Type: typeWPVersion,
FilePath: filePath,
Data: wpVersion,
},
},
}, nil
}
```
!!! tips
Trivy caches analysis results according to the module version.
We'd recommend cleaning the cache or changing the module version every time you update `Analyzer`.
#### PostScanner interface
`PostScan` is called after scanning and takes the scan result as an argument from Trivy.
In post scanning, your module can perform one of three actions:
- Insert
- Add a new security finding
- e.g. Add a new vulnerability and misconfiguration
- Update
- Update the detected vulnerability and misconfiguration
- e.g. Change a severity
- Delete
- Delete the detected vulnerability and misconfiguration
- e.g. Remove Spring4Shell because it is not actually affected.
`PostScanSpec()` returns which action the module does.
If it is `Update` or `Delete`, it also needs to return IDs such as CVE-ID and misconfiguration ID, which your module wants to update or delete.
`serialize.Results` contains the filtered results matching IDs you specified.
Also, it includes `CustomResources` with the values your `Analyze` returns, so you can modify the scan result according to the custom resources.
```go
func (WordpressModule) PostScanSpec() serialize.PostScanSpec {
return serialize.PostScanSpec{
Action: api.ActionInsert, // Add new vulnerabilities
}
}
func (WordpressModule) PostScan(results serialize.Results) (serialize.Results, error) {
// e.g. results
// [
// {
// "Target": "",
// "Class": "custom",
// "CustomResources": [
// {
// "Type": "wordpress-version",
// "FilePath": "/usr/src/wordpress/wp-includes/version.php",
// "Layer": {
// "DiffID": "sha256:057649e61046e02c975b84557c03c6cca095b8c9accd3bd20eb4e432f7aec887"
// },
// "Data": "5.7.1"
// }
// ]
// }
// ]
var wpVersion int
for _, result := range results {
if result.Class != types.ClassCustom {
continue
}
for _, c := range result.CustomResources {
if c.Type != typeWPVersion {
continue
}
wpVersion = c.Data.(string)
wasm.Info(fmt.Sprintf("WordPress Version: %s", wpVersion))
...snip...
if affectedVersion.Check(ver) {
vulnerable = true
}
break
}
}
if vulnerable {
// Add CVE-2020-36326
results = append(results, serialize.Result{
Target: wpPath,
Class: types.ClassLangPkg,
Type: "wordpress",
Vulnerabilities: []types.DetectedVulnerability {
{
VulnerabilityID: "CVE-2020-36326",
PkgName: "wordpress",
InstalledVersion: wpVersion,
FixedVersion: "5.7.2",
Vulnerability: dbTypes.Vulnerability{
Title: "PHPMailer 6.1.8 through 6.4.0 allows object injection through Phar Deserialization via addAttachment with a UNC pathname.",
Severity: "CRITICAL",
},
},
},
})
}
return results, nil
}
```
The new vulnerability will be added to the scan results.
This example shows how the module inserts a new finding.
If you are interested in `Update`, you can see an example of [Spring4Shell][trivy-module-spring4shell].
In the `Delete` action, `PostScan` needs to return results you want to delete.
If `PostScan` returns an empty, Trivy will not delete anything.
#### Build
Follow [the install guide][tinygo-installation] and install TinyGo.
```bash
$ tinygo build -o wordpress.wasm -scheduler=none -target=wasi --no-debug wordpress.go
```
Put the built binary to the module directory that is under the home directory by default.
```bash
$ mkdir -p ~/.trivy/modules
$ cp spring4shell.wasm ~/.trivy/modules
```
## Distribute Your Module
You can distribute your own module in OCI registries. Please follow [the oras installation instruction][oras].
```bash
oras push ghcr.io/aquasecurity/trivy-module-wordpress:latest wordpress.wasm:application/vnd.module.wasm.content.layer.v1+wasm
Uploading 3daa3dac086b wordpress.wasm
Pushed ghcr.io/aquasecurity/trivy-module-wordpress:latest
Digest: sha256:6416d0199d66ce52ced19f01d75454b22692ff3aa7737e45f7a189880840424f
```
## Examples
- [Spring4Shell][trivy-module-spring4shell]
- [WordPress][trivy-module-wordpress]
[regexp]: https://github.com/google/re2/wiki/Syntax
[tinygo]: https://tinygo.org/
[spring4shell]: https://blog.aquasec.com/zero-day-rce-vulnerability-spring4shell
[wazero]: https://github.com/tetratelabs/wazero
[trivy-module-spring4shell]: https://github.com/aquasecurity/trivy/tree/main/examples/module/spring4shell
[trivy-module-wordpress]: https://github.com/aquasecurity/trivy-module-wordpress
[tinygo-installation]: https://tinygo.org/getting-started/install/
[oras]: https://oras.land/cli/

View File

@@ -0,0 +1,142 @@
# Scan SBOM attestation in Rekor
!!! warning "EXPERIMENTAL"
This feature might change without preserving backwards compatibility.
## Container images
Trivy can retrieve SBOM attestation of the specified container image in the [Rekor][rekor] instance and scan it for vulnerabilities.
### Prerequisites
1. SBOM attestation stored in Rekor
- See [the "Keyless signing" section][sbom-attest] if you want to upload your SBOM attestation to Rekor.
### Scanning
You need to pass `--sbom-sources rekor` so that Trivy will look for SBOM attestation in Rekor.
!!! note
`--sbom-sources` can be used only with `trivy image` at the moment.
```bash
$ trivy image --sbom-sources rekor otms61/alpine:3.7.3 [~/src/github.com/aquasecurity/trivy]
2022-09-16T17:37:13.258+0900 INFO Vulnerability scanning is enabled
2022-09-16T17:37:13.258+0900 INFO Secret scanning is enabled
2022-09-16T17:37:13.258+0900 INFO If your scanning is slow, please try '--security-checks vuln' to disable secret scanning
2022-09-16T17:37:13.258+0900 INFO Please see also https://aquasecurity.github.io/trivy/dev/docs/secret/scanning/#recommendation for faster secret detection
2022-09-16T17:37:14.827+0900 INFO Detected SBOM format: cyclonedx-json
2022-09-16T17:37:14.901+0900 INFO Found SBOM (cyclonedx) attestation in Rekor
2022-09-16T17:37:14.903+0900 INFO Detected OS: alpine
2022-09-16T17:37:14.903+0900 INFO Detecting Alpine vulnerabilities...
2022-09-16T17:37:14.907+0900 INFO Number of language-specific files: 0
2022-09-16T17:37:14.908+0900 WARN This OS version is no longer supported by the distribution: alpine 3.7.3
2022-09-16T17:37:14.908+0900 WARN The vulnerability detection may be insufficient because security updates are not provided
otms61/alpine:3.7.3 (alpine 3.7.3)
==================================
Total: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 2)
┌────────────┬────────────────┬──────────┬───────────────────┬───────────────┬──────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────┤
│ musl │ CVE-2019-14697 │ CRITICAL │ 1.1.18-r3 │ 1.1.18-r4 │ musl libc through 1.1.23 has an x87 floating-point stack │
│ │ │ │ │ │ adjustment im ...... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-14697 │
├────────────┤ │ │ │ │ │
│ musl-utils │ │ │ │ │ │
│ │ │ │ │ │ │
│ │ │ │ │ │ │
└────────────┴────────────────┴──────────┴───────────────────┴───────────────┴──────────────────────────────────────────────────────────┘
```
If you have your own Rekor instance, you can specify the URL via `--rekor-url`.
```bash
$ trivy image --sbom-sources rekor --rekor-url https://my-rekor.dev otms61/alpine:3.7.3
```
## Non-packaged binaries
Trivy can retrieve SBOM attestation of non-packaged binaries in the [Rekor][rekor] instance and scan it for vulnerabilities.
### Prerequisites
1. SBOM attestation stored in Rekor
- See [the "Keyless signing" section][sbom-attest] if you want to upload your SBOM attestation to Rekor.
Cosign currently does not support keyless signing for blob attestation, so use our plugin at the moment.
This example uses a cat clone [bat][bat] written in Rust.
You need to generate SBOM from lock files like `Cargo.lock` at first.
```bash
$ git clone -b v0.20.0 https://github.com/sharkdp/bat
$ trivy fs --format cyclonedx --output bat.cdx ./bat/Cargo.lock
```
Then [our attestation plugin][plugin-attest] allows you to store the SBOM attestation linking to a `bat` binary in the Rekor instance.
```bash
$ wget https://github.com/sharkdp/bat/releases/download/v0.20.0/bat-v0.20.0-x86_64-apple-darwin.tar.gz
$ tar xvf bat-v0.20.0-x86_64-apple-darwin.tar.gz
$ trivy plugin install github.com/aquasecurity/trivy-plugin-attest
$ trivy attest --predicate ./bat.cdx --type cyclonedx ./bat-v0.20.0-x86_64-apple-darwin/bat
```
### Scan a non-packaged binary
Trivy calculates the digest of the `bat` binary and searches for the SBOM attestation by the digest in Rekor.
If it is found, Trivy uses that for vulnerability scanning.
```bash
$ trivy fs --sbom-sources rekor ./bat-v0.20.0-x86_64-apple-darwin/bat
2022-10-25T13:27:25.950+0300 INFO Found SBOM attestation in Rekor: bat
2022-10-25T13:27:25.993+0300 INFO Number of language-specific files: 1
2022-10-25T13:27:25.993+0300 INFO Detecting cargo vulnerabilities...
bat (cargo)
===========
Total: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 1, CRITICAL: 0)
┌───────────┬───────────────────┬──────────┬───────────────────┬───────────────┬────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├───────────┼───────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ regex │ CVE-2022-24713 │ HIGH │ 1.5.4 │ 1.5.5 │ Mozilla: Denial of Service via complex regular expressions │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-24713 │
└───────────┴───────────────────┴──────────┴───────────────────┴───────────────┴────────────────────────────────────────────────────────────┘
```
Also, it is applied to non-packaged binaries even in container images.
```bash
$ trivy image --sbom-sources rekor --security-checks vuln alpine-with-bat
2022-10-25T13:40:14.920+0300 INFO Vulnerability scanning is enabled
2022-10-25T13:40:18.047+0300 INFO Found SBOM attestation in Rekor: bat
2022-10-25T13:40:18.186+0300 INFO Detected OS: alpine
2022-10-25T13:40:18.186+0300 INFO Detecting Alpine vulnerabilities...
2022-10-25T13:40:18.199+0300 INFO Number of language-specific files: 1
2022-10-25T13:40:18.199+0300 INFO Detecting cargo vulnerabilities...
alpine-with-bat (alpine 3.15.6)
===============================
Total: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
bat (cargo)
===========
Total: 4 (UNKNOWN: 3, LOW: 0, MEDIUM: 0, HIGH: 1, CRITICAL: 0)
┌───────────┬───────────────────┬──────────┬───────────────────┬───────────────┬────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├───────────┼───────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ regex │ CVE-2022-24713 │ HIGH │ 1.5.4 │ 1.5.5 │ Mozilla: Denial of Service via complex regular expressions │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-24713 │
└───────────┴───────────────────┴──────────┴───────────────────┴───────────────┴────────────────────────────────────────────────────────────┘
```
!!! note
The `--sbom-sources rekor` flag slows down the scanning as it queries Rekor on the Internet for all non-packaged binaries.
[rekor]: https://github.com/sigstore/rekor
[sbom-attest]: sbom.md#keyless-signing
[plugin-attest]: https://github.com/aquasecurity/trivy-plugin-attest
[bat]: https://github.com/sharkdp/bat

View File

@@ -0,0 +1,87 @@
# SBOM attestation
[Cosign](https://github.com/sigstore/cosign) supports generating and verifying [in-toto attestations](https://github.com/in-toto/attestation). This tool enables you to sign and verify SBOM attestation.
And, Trivy can take an SBOM attestation as input and scan for vulnerabilities
!!! note
In the following examples, the `cosign` command will write an attestation to a target OCI registry, so you must have permission to write.
If you want to avoid writing an OCI registry and only want to see an attestation, add the `--no-upload` option to the `cosign` command.
## Sign with a local key pair
Cosign can generate key pairs and use them for signing and verification. After you run the following command, you will get a public and private key pair. Read more about [how to generate key pairs](https://docs.sigstore.dev/cosign/key-generation).
```bash
$ cosign generate-key-pair
```
In the following example, Trivy generates an SBOM in the CycloneDX format, and then Cosign attaches an attestation of the SBOM to a container image with a local key pair.
```bash
# The cyclonedx type is supported in Cosign v1.10.0 or later.
$ trivy image --format cyclonedx -o sbom.cdx.json <IMAGE>
$ cosign attest --key /path/to/cosign.key --type cyclonedx --predicate sbom.cdx.json <IMAGE>
```
Then, you can verify attestations on the image.
```bash
$ cosign verify-attestation --key /path/to/cosign.pub --type cyclonedx <IMAGE>
```
You can also create attestations of other formatted SBOM.
```bash
# spdx
$ trivy image --format spdx -o sbom.spdx <IMAGE>
$ cosign attest --key /path/to/cosign.key --type spdx --predicate sbom.spdx <IMAGE>
# spdx-json
$ trivy image --format spdx-json -o sbom.spdx.json <IMAGE>
$ cosign attest --key /path/to/cosign.key --type spdx --predicate sbom.spdx.json <IMAGE>
```
## Keyless signing
You can use Cosign to sign without keys by authenticating with an OpenID Connect protocol supported by sigstore (Google, GitHub, or Microsoft).
```bash
# The cyclonedx type is supported in Cosign v1.10.0 or later.
$ trivy image --format cyclonedx -o sbom.cdx.json <IMAGE>
# The following command uploads SBOM attestation to the public Rekor instance.
$ COSIGN_EXPERIMENTAL=1 cosign attest --type cyclonedx --predicate sbom.cdx.json <IMAGE>
```
You can verify attestations.
```bash
$ COSIGN_EXPERIMENTAL=1 cosign verify-attestation --type cyclonedx <IMAGE>
```
## Scanning
Trivy can take an SBOM attestation as input and scan for vulnerabilities. Currently, Trivy supports CycloneDX-type attestation.
In the following example, Cosign can get an CycloneDX-type attestation and trivy scan it.
You must create CycloneDX-type attestation before trying the example.
To learn more about how to create an CycloneDX-Type attestation and attach it to an image, see the [Sign with a local key pair](#sign-with-a-local-key-pair) section.
```bash
$ cosign verify-attestation --key /path/to/cosign.pub --type cyclonedx <IMAGE> > sbom.cdx.intoto.jsonl
$ trivy sbom ./sbom.cdx.intoto.jsonl
sbom.cdx.intoto.jsonl (alpine 3.7.3)
=========================
Total: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 2)
┌────────────┬────────────────┬──────────┬───────────────────┬───────────────┬──────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────┤
│ musl │ CVE-2019-14697 │ CRITICAL │ 1.1.18-r3 │ 1.1.18-r4 │ musl libc through 1.1.23 has an x87 floating-point stack │
│ │ │ │ │ │ adjustment im ...... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-14697 │
├────────────┤ │ │ │ │ │
│ musl-utils │ │ │ │ │ │
│ │ │ │ │ │ │
│ │ │ │ │ │ │
└────────────┴────────────────┴──────────┴───────────────────┴───────────────┴──────────────────────────────────────────────────────────┘
```

View File

@@ -0,0 +1,190 @@
# Cosign Vulnerability Attestation
## Generate Cosign Vulnerability Scan Record
Trivy generates reports in the [Cosign vulnerability scan record format][vuln-attest-spec].
You can use the regular subcommands (like image, fs and rootfs) and specify `cosign-vuln` with the --format option.
```
$ trivy image --format cosign-vuln --output vuln.json alpine:3.10
```
<details>
<summary>Result</summary>
```json
{
"invocation": {
"parameters": null,
"uri": "",
"event_id": "",
"builder.id": ""
},
"scanner": {
"uri": "pkg:github/aquasecurity/trivy@v0.30.1-8-gf9cb8a28",
"version": "v0.30.1-8-gf9cb8a28",
"db": {
"uri": "",
"version": ""
},
"result": {
"SchemaVersion": 2,
"ArtifactName": "alpine:3.10",
"ArtifactType": "container_image",
"Metadata": {
"OS": {
"Family": "alpine",
"Name": "3.10.9",
"EOSL": true
},
"ImageID": "sha256:e7b300aee9f9bf3433d32bc9305bfdd22183beb59d933b48d77ab56ba53a197a",
"DiffIDs": [
"sha256:9fb3aa2f8b8023a4bebbf92aa567caf88e38e969ada9f0ac12643b2847391635"
],
"RepoTags": [
"alpine:3.10"
],
"RepoDigests": [
"alpine@sha256:451eee8bedcb2f029756dc3e9d73bab0e7943c1ac55cff3a4861c52a0fdd3e98"
],
"ImageConfig": {
"architecture": "amd64",
"container": "fdb7e80e3339e8d0599282e606c907aa5881ee4c668a68136119e6dfac6ce3a4",
"created": "2021-04-14T19:20:05.338397761Z",
"docker_version": "19.03.12",
"history": [
{
"created": "2021-04-14T19:20:04.987219124Z",
"created_by": "/bin/sh -c #(nop) ADD file:c5377eaa926bf412dd8d4a08b0a1f2399cfd708743533b0aa03b53d14cb4bb4e in / "
},
{
"created": "2021-04-14T19:20:05.338397761Z",
"created_by": "/bin/sh -c #(nop) CMD [\"/bin/sh\"]",
"empty_layer": true
}
],
"os": "linux",
"rootfs": {
"type": "layers",
"diff_ids": [
"sha256:9fb3aa2f8b8023a4bebbf92aa567caf88e38e969ada9f0ac12643b2847391635"
]
},
"config": {
"Cmd": [
"/bin/sh"
],
"Env": [
"PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
],
"Image": "sha256:eb2080c455e94c22ae35b3aef9e078c492a00795412e026e4d6b41ef64bc7dd8"
}
}
},
"Results": [
{
"Target": "alpine:3.10 (alpine 3.10.9)",
"Class": "os-pkgs",
"Type": "alpine",
"Vulnerabilities": [
{
"VulnerabilityID": "CVE-2021-36159",
"PkgName": "apk-tools",
"InstalledVersion": "2.10.6-r0",
"FixedVersion": "2.10.7-r0",
"Layer": {
"Digest": "sha256:396c31837116ac290458afcb928f68b6cc1c7bdd6963fc72f52f365a2a89c1b5",
"DiffID": "sha256:9fb3aa2f8b8023a4bebbf92aa567caf88e38e969ada9f0ac12643b2847391635"
},
"SeveritySource": "nvd",
"PrimaryURL": "https://avd.aquasec.com/nvd/cve-2021-36159",
"DataSource": {
"ID": "alpine",
"Name": "Alpine Secdb",
"URL": "https://secdb.alpinelinux.org/"
},
"Description": "libfetch before 2021-07-26, as used in apk-tools, xbps, and other products, mishandles numeric strings for the FTP and HTTP protocols. The FTP passive mode implementation allows an out-of-bounds read because strtol is used to parse the relevant numbers into address bytes. It does not check if the line ends prematurely. If it does, the for-loop condition checks for the '\\0' terminator one byte too late.",
"Severity": "CRITICAL",
"CweIDs": [
"CWE-125"
],
"CVSS": {
"nvd": {
"V2Vector": "AV:N/AC:L/Au:N/C:P/I:N/A:P",
"V3Vector": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:H",
"V2Score": 6.4,
"V3Score": 9.1
}
},
"References": [
"https://github.com/freebsd/freebsd-src/commits/main/lib/libfetch",
"https://gitlab.alpinelinux.org/alpine/apk-tools/-/issues/10749",
"https://lists.apache.org/thread.html/r61db8e7dcb56dc000a5387a88f7a473bacec5ee01b9ff3f55308aacc@%3Cdev.kafka.apache.org%3E",
"https://lists.apache.org/thread.html/r61db8e7dcb56dc000a5387a88f7a473bacec5ee01b9ff3f55308aacc@%3Cusers.kafka.apache.org%3E",
"https://lists.apache.org/thread.html/rbf4ce74b0d1fa9810dec50ba3ace0caeea677af7c27a97111c06ccb7@%3Cdev.kafka.apache.org%3E",
"https://lists.apache.org/thread.html/rbf4ce74b0d1fa9810dec50ba3ace0caeea677af7c27a97111c06ccb7@%3Cusers.kafka.apache.org%3E"
],
"PublishedDate": "2021-08-03T14:15:00Z",
"LastModifiedDate": "2021-10-18T12:19:00Z"
}
]
}
]
}
},
"metadata": {
"scanStartedOn": "2022-07-24T17:14:04.864682+09:00",
"scanFinishedOn": "2022-07-24T17:14:04.864682+09:00"
}
}
```
</details>
## Create Cosign Vulnerability Attestation
[Cosign](https://github.com/sigstore/cosign) supports generating and verifying [in-toto attestations](https://github.com/in-toto/attestation). This tool enables you to sign and verify Cosign vulnerability attestation.
!!! note
In the following examples, the `cosign` command will write an attestation to a target OCI registry, so you must have permission to write.
If you want to avoid writing an OCI registry and only want to see an attestation, add the `--no-upload` option to the `cosign` command.
### Sign with a local key pair
Cosign can generate key pairs and use them for signing and verification. After you run the following command, you will get a public and private key pair. Read more about [how to generate key pairs](https://docs.sigstore.dev/cosign/key-generation).
```bash
$ cosign generate-key-pair
```
In the following example, Trivy generates a cosign vulnerability scan record, and then Cosign attaches an attestation of it to a container image with a local key pair.
```
$ trivy image --format cosign-vuln --output vuln.json <IMAGE>
$ cosign attest --key /path/to/cosign.key --type vuln --predicate vuln.json <IMAGE>
```
Then, you can verify attestations on the image.
```
$ cosign verify-attestation --key /path/to/cosign.pub --type vuln <IMAGE>
```
### Keyless signing
You can use Cosign to sign without keys by authenticating with an OpenID Connect protocol supported by sigstore (Google, GitHub, or Microsoft).
```
$ trivy image --format cosign-vuln -o vuln.json <IMAGE>
$ COSIGN_EXPERIMENTAL=1 cosign attest --type vuln --predicate vuln.json <IMAGE>
```
You can verify attestations.
```
$ COSIGN_EXPERIMENTAL=1 cosign verify-attestation --type vuln <IMAGE>
```
[vuln-attest-spec]: https://github.com/sigstore/cosign/blob/95b74db89941e8ec85e768f639efd4d948db06cd/specs/COSIGN_VULN_ATTESTATION_SPEC.md

View File

@@ -0,0 +1,59 @@
# Amazon Web Services
!!! warning "EXPERIMENTAL"
This feature might change without preserving backwards compatibility.
The Trivy AWS CLI allows you to scan your AWS account for misconfigurations. You can either run the CLI locally or integrate it into your CI/CD pipeline.
Whilst you can already scan the infrastructure-as-code that defines your AWS resources with `trivy config`, you can now scan your live AWS account(s) directly too.
The included checks cover all of the aspects of the [AWS CIS 1.2](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-cis.html) automated benchmarks.
Trivy uses the same [authentication methods](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-configure.html) as the AWS CLI to configure and authenticate your access to the AWS platform.
You will need permissions configured to read all AWS resources - we recommend using a group/role with the `ReadOnlyAccess` policy attached.
Once you've scanned your account, you can run additional commands to filter the results without having to run the entire scan again - infrastructure information is cached locally per AWS account/region.
## CLI Commands
Scan a full AWS account (all supported services):
```shell
trivy aws --region us-east-1
```
You can allow Trivy to determine the AWS region etc. by using the standard AWS configuration files and environment variables. The `--region` flag overrides these.
![AWS Summary Report](../../../imgs/trivy-aws.png)
The summary view is the default when scanning multiple services.
Scan a specific service:
```shell
trivy aws --service s3
```
Scan multiple services:
```shell
# --service s3,ec2 works too
trivy aws --service s3 --service ec2
```
Show results for a specific AWS resource:
```shell
trivy aws --service s3 --arn arn:aws:s3:::example-bucket
```
All ARNs with detected issues will be displayed when showing results for their associated service.
## Cached Results
By default, Trivy will cache a representation of each AWS service for 24 hours. This means you can filter and view results for a service without having to wait for the entire scan to run again. If you want to force the cache to be refreshed with the latest data, you can use `--update-cache`. Or if you'd like to use cached data for a different timeframe, you can specify `--max-cache-age` (e.g. `--max-cache-age 2h`.). Regardless of whether the cache is used or not, rules will be evaluated again with each run of `trivy aws`.
## Custom Policies
You can write custom policies for Trivy to evaluate against your AWS account. These policies are written in [Rego](https://www.openpolicyagent.org/docs/latest/policy-language/), the same language used by [Open Policy Agent](https://www.openpolicyagent.org/). See the [Custom Policies](../../misconfiguration/custom/index.md) page for more information.

View File

@@ -0,0 +1,8 @@
# Compliance Reports
Trivy support producing compliance reports.
## Supported reports
- [NSA, CISA Kubernetes Hardening Guidance v1.0](../kubernetes/cli/compliance.md)

View File

@@ -1,29 +1,12 @@
# Docs
Trivy detects two types of security issues:
- [Vulnerabilities][vuln]
- [Misconfigurations][misconf]
Trivy can scan three different artifacts:
- [Container Images][container]
- [Filesystem][filesystem] and [Rootfs][rootfs]
- [Git Repositories][repo]
Trivy can be run in two different modes:
- [Standalone][standalone]
- [Client/Server][client-server]
It is designed to be used in CI. Before pushing to a container registry or deploying your application, you can scan your local container image and other artifacts easily.
See [Integrations][integrations] for details.
This documentation details how to use Trivy to access the features listed below.
## Features
- Comprehensive vulnerability detection
- [OS packages][os] (Alpine, Red Hat Universal Base Image, Red Hat Enterprise Linux, CentOS, AlmaLinux, Rocky Linux, CBL-Mariner, Oracle Linux, Debian, Ubuntu, Amazon Linux, openSUSE Leap, SUSE Enterprise Linux, Photon OS and Distroless)
- [**Language-specific packages**][lang] (Bundler, Composer, Pipenv, Poetry, npm, yarn, Cargo, NuGet, Maven, and Go)
- [**Language-specific packages**][lang] (Bundler, Composer, Pipenv, Poetry, npm, yarn, pnpm, Cargo, NuGet, Maven, and Go)
- Detect IaC misconfigurations
- A wide variety of [built-in policies][builtin] are provided **out of the box**:
- Kubernetes
@@ -56,21 +39,25 @@ See [Integrations][integrations] for details.
- local filesystem and rootfs
- remote git repository
- [SBOM][sbom] (Software Bill of Materials) support
- CycloneDX
- CycloneDX
- SPDX
- GitHub Dependency Snapshots
Please see [LICENSE][license] for Trivy licensing information.
[installation]: ../getting-started/installation.md
[installation]: ../index.md
[vuln]: ../docs/vulnerability/scanning/index.md
[misconf]: ../docs/misconfiguration/index.md
[misconf]: ../docs/misconfiguration/scanning.md
[kubernetesoperator]: ../docs/kubernetes/operator/index.md
[container]: ../docs/vulnerability/scanning/image.md
[rootfs]: ../docs/vulnerability/scanning/rootfs.md
[filesystem]: ../docs/vulnerability/scanning/filesystem.md
[repo]: ../docs/vulnerability/scanning/git-repository.md
[kubernetes]: ../docs/kubernetes/cli/scanning.md
[standalone]: ../docs/references/modes/standalone.md
[client-server]: ../docs/references/modes/client-server.md
[integrations]: ../docs/integrations/index.md
[integrations]: ../tutorials/integrations/index.md
[os]: ../docs/vulnerability/detection/os.md
[lang]: ../docs/vulnerability/detection/language.md
@@ -82,4 +69,4 @@ Please see [LICENSE][license] for Trivy licensing information.
[sbom]: ../docs/sbom/index.md
[oci]: https://github.com/opencontainers/image-spec
[license]: https://github.com/aquasecurity/trivy/blob/main/LICENSE
[license]: https://github.com/aquasecurity/trivy/blob/main/LICENSE

View File

@@ -1,29 +0,0 @@
# AWS Security Hub
## Upload findings to Security Hub
In the following example using the template `asff.tpl`, [ASFF](https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format.html) file can be generated.
```
$ AWS_REGION=us-west-1 AWS_ACCOUNT_ID=123456789012 trivy image --format template --template "@contrib/asff.tpl" -o report.asff golang:1.12-alpine
```
ASFF template needs AWS_REGION and AWS_ACCOUNT_ID from environment variables.
Then, you can upload it with AWS CLI.
```
$ aws securityhub batch-import-findings --findings file://report.asff
```
## Customize
You can customize [asff.tpl](https://github.com/aquasecurity/trivy/blob/main/contrib/asff.tpl)
```
$ export AWS_REGION=us-west-1
$ export AWS_ACCOUNT_ID=123456789012
$ trivy image --format template --template "@your-asff.tpl" -o report.asff golang:1.12-alpine
```
## Reference
https://aws.amazon.com/blogs/security/how-to-build-ci-cd-pipeline-container-vulnerability-scanning-trivy-and-aws-security-hub/

View File

@@ -0,0 +1,17 @@
# Woodpecker CI
This is a simple example configuration `.woodpecker/trivy.yml` that shows how you could get started:
```yml
pipeline:
securitycheck:
image: aquasec/trivy:latest
commands:
# use any trivy command, if exit code is 0 woodpecker marks it as passed, else it assumes it failed
- trivy fs --exit-code 1 --skip-dirs web/ --skip-dirs docs/ --severity MEDIUM,HIGH,CRITICAL .
```
Woodpecker does use Trivy itself so you can see an [Example][example] run at its [Repository][repository] and how it was [added](https://github.com/woodpecker-ci/woodpecker/pull/1163).
[example]: https://ci.woodpecker-ci.org/woodpecker-ci/woodpecker/build/3520/37
[repository]: https://github.com/woodpecker-ci/woodpecker

View File

@@ -0,0 +1,68 @@
# Kubernetes Compliance
## NSA Complaince Report
!!! warning "EXPERIMENTAL"
This feature might change without preserving backwards compatibility.
The Trivy K8s CLI allows you to scan your Kubernetes cluster resources and generate the `NSA, CISA Kubernetes Hardening Guidance` report
[NSA, CISA Kubernetes Hardening Guidance v1.2](https://media.defense.gov/2022/Aug/29/2003066362/-1/-1/0/CTR_KUBERNETES_HARDENING_GUIDANCE_1.2_20220829.PDF) cybersecurity technical report is produced by trivy and validate the following control checks :
| NAME | DESCRIPTION | |
|----------------------------------------------------------|---------------------------------------------------------------------------------------------------------|---------------|
| Non-root containers | Check that container is not running as root |
| Immutable container file systems | Check that container root file system is immutable |
| Preventing privileged containers | Controls whether Pods can run privileged containers |
| Share containers process namespaces | Controls whether containers can share process namespaces |
| Share host process namespaces | Controls whether share host process namespaces |
| Use the host network | Controls whether containers can use the host network |
| Run with root privileges or with root group membership | Controls whether container applications can run with <br/>root privileges or with root group membership |
| Restricts escalation to root privileges | Control check restrictions escalation to root privileges |
| Sets the SELinux context of the container | Control checks if pod sets the SELinux context of the container |
| Restrict a container's access to resources with AppArmor | Control checks the restriction of containers access to resources with AppArmor |
| Sets the seccomp profile used to sandbox containers | Control checks the sets the seccomp profile used to sandbox containers |
| Protecting Pod service account tokens | Control check whether disable secret token been mount ,automountServiceAccountToken: false |
| Namespace kube-system should not be used by users | Control check whether Namespace kube-system is not be used by users |
| Pod and/or namespace Selectors usage | Control check validate the pod and/or namespace Selectors usage |
| Use CNI plugin that supports NetworkPolicy API | Control check whether check cni plugin installed |
| Use ResourceQuota policies to limit resources | Control check the use of ResourceQuota policy to limit aggregate resource usage within namespace |
| Use LimitRange policies to limit resources | Control check the use of LimitRange policy limit resource usage for namespaces or nodes |
| Control plan disable insecure port | Control check whether control plan disable insecure port |
| Encrypt etcd communication | Control check whether etcd communication is encrypted |
| Ensure kube config file permission | Control check whether kube config file permissions |
| Check that encryption resource has been set | Control checks whether encryption resource has been set |
| Check encryption provider | Control checks whether encryption provider has been set |
| Make sure anonymous-auth is unset | Control checks whether anonymous-auth is unset |
| Make sure -authorization-mode=RBAC | Control check whether RBAC permission is in use |
| Audit policy is configure | Control check whether audit policy is configure |
| Audit log path is configure | Control check whether audit log path is configure |
| Audit log aging | Control check whether audit log aging is configure |
## CLI Commands
Scan a full cluster and generate a complliance NSA summary report:
```
$ trivy k8s cluster --compliance=nsa --report summary
```
![k8s Summary Report](../../../imgs/trivy-nsa-summary.png)
***Note*** : The `compliance` column represent the calculation of all tests pass vs. fail for all resources per control check in percentage format.
Example: if I have two resources in cluster and one resource scan result show pass while the other one show fail for `1.0 Non-root Containers` then it compliance will show 50%
An additional report is supported to get all of the detail the output contains, use `--report all`
```
$ trivy k8s cluster --compliance=nsa --report all
```
Report also supported in json format examples :
```
$ trivy k8s cluster --compliance=nsa --report summary --format json
```
```
$ trivy k8s cluster --compliance=nsa --report all --format json
```

View File

@@ -0,0 +1,279 @@
# Kubernetes
!!! warning "EXPERIMENTAL"
This feature might change without preserving backwards compatibility.
The Trivy K8s CLI allows you to scan your Kubernetes cluster for Vulnerabilities, Secrets and Misconfigurations. You can either run the CLI locally or integrate it into your CI/CD pipeline. The difference to the Trivy CLI is that the Trivy K8s CLI allows you to scan running workloads directly within your cluster.
If you are looking for continuous cluster audit scanning, have a look at the [Trivy K8s operator.](../operator/index.md)
Trivy uses your local kubectl configuration to access the API server to list artifacts.
## CLI Commands
Scan a full cluster and generate a simple summary report:
```
$ trivy k8s --report=summary cluster
```
![k8s Summary Report](../../../imgs/trivy-k8s.png)
The summary report is the default. To get all of the detail the output contains, use `--report all`.
Filter by severity:
```
$ trivy k8s --severity=CRITICAL --report=all cluster
```
Filter by security check (Vulnerabilities, Secrets or Misconfigurations):
```
$ trivy k8s --security-checks=secret --report=summary cluster
# or
$ trivy k8s --security-checks=config --report=summary cluster
```
Scan a specific namespace:
```
$ trivy k8s -n kube-system --report=summary all
```
Use a specific kubeconfig file:
```
$ trivy k8s --kubeconfig ~/.kube/config2 -n kube-system --report=summary all
```
Scan a specific resource and get all the output:
```
$ trivy k8s deployment appname
```
Scan all deploys, or deploys and configmaps:
```
$ trivy k8s --report=summary deployment
$ trivy k8s --report=summary deployment,configmaps
```
If you want to pass in flags before scanning specific workloads, you will have to do it before the resource name.
For example, scanning a deployment in the app namespace of your Kubernetes cluster for critical vulnerabilities would be done through the following command:
```
$ trivy k8s -n app --severity=CRITICAL deployment/appname
```
This is specific to all Trivy CLI commands.
The supported formats are `table`, which is the default, and `json`.
To get a JSON output on a full cluster scan:
```
$ trivy k8s --format json -o results.json cluster
```
<details>
<summary>Result</summary>
```json
{
"ClusterName": "minikube",
"Vulnerabilities": [
{
"Namespace": "default",
"Kind": "Deployment",
"Name": "app",
"Results": [
{
"Target": "ubuntu:latest (ubuntu 22.04)",
"Class": "os-pkgs",
"Type": "ubuntu",
"Vulnerabilities": [
{
"VulnerabilityID": "CVE-2016-2781",
"PkgName": "coreutils",
"InstalledVersion": "8.32-4.1ubuntu1",
"Layer": {
"Digest": "sha256:125a6e411906fe6b0aaa50fc9d600bf6ff9bb11a8651727ce1ed482dc271c24c",
"DiffID": "sha256:e59fc94956120a6c7629f085027578e6357b48061d45714107e79f04a81a6f0c"
},
"SeveritySource": "ubuntu",
"PrimaryURL": "https://avd.aquasec.com/nvd/cve-2016-2781",
"DataSource": {
"ID": "ubuntu",
"Name": "Ubuntu CVE Tracker",
"URL": "https://git.launchpad.net/ubuntu-cve-tracker"
},
"Title": "coreutils: Non-privileged session can escape to the parent session in chroot",
"Description": "chroot in GNU coreutils, when used with --userspec, allows local users to escape to the parent session via a crafted TIOCSTI ioctl call, which pushes characters to the terminal's input buffer.",
"Severity": "LOW",
"CweIDs": [
"CWE-20"
],
"VendorSeverity": {
"cbl-mariner": 2,
"nvd": 2,
"redhat": 2,
"ubuntu": 1
},
"CVSS": {
"nvd": {
"V2Vector": "AV:L/AC:L/Au:N/C:N/I:P/A:N",
"V3Vector": "CVSS:3.0/AV:L/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N",
"V2Score": 2.1,
"V3Score": 6.5
},
"redhat": {
"V2Vector": "AV:L/AC:H/Au:N/C:C/I:C/A:C",
"V3Vector": "CVSS:3.0/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H",
"V2Score": 6.2,
"V3Score": 8.6
}
},
"References": [
"http://seclists.org/oss-sec/2016/q1/452",
"http://www.openwall.com/lists/oss-security/2016/02/28/2",
"http://www.openwall.com/lists/oss-security/2016/02/28/3",
"https://access.redhat.com/security/cve/CVE-2016-2781",
"https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-2781",
"https://lists.apache.org/thread.html/rf9fa47ab66495c78bb4120b0754dd9531ca2ff0430f6685ac9b07772@%3Cdev.mina.apache.org%3E",
"https://lore.kernel.org/patchwork/patch/793178/",
"https://nvd.nist.gov/vuln/detail/CVE-2016-2781"
],
"PublishedDate": "2017-02-07T15:59:00Z",
"LastModifiedDate": "2021-02-25T17:15:00Z"
}
]
}
]
}
],
"Misconfigurations": [
{
"Namespace": "default",
"Kind": "Deployment",
"Name": "app",
"Results": [
{
"Target": "Deployment/app",
"Class": "config",
"Type": "kubernetes",
"MisconfSummary": {
"Successes": 20,
"Failures": 19,
"Exceptions": 0
},
"Misconfigurations": [
{
"Type": "Kubernetes Security Check",
"ID": "KSV001",
"Title": "Process can elevate its own privileges",
"Description": "A program inside the container can elevate its own privileges and run as root, which might give the program control over the container and node.",
"Message": "Container 'app' of Deployment 'app' should set 'securityContext.allowPrivilegeEscalation' to false",
"Namespace": "builtin.kubernetes.KSV001",
"Query": "data.builtin.kubernetes.KSV001.deny",
"Resolution": "Set 'set containers[].securityContext.allowPrivilegeEscalation' to 'false'.",
"Severity": "MEDIUM",
"PrimaryURL": "https://avd.aquasec.com/misconfig/ksv001",
"References": [
"https://kubernetes.io/docs/concepts/security/pod-security-standards/#restricted",
"https://avd.aquasec.com/misconfig/ksv001"
],
"Status": "FAIL",
"Layer": {},
"IacMetadata": {
"Provider": "Kubernetes",
"Service": "general",
"StartLine": 121,
"EndLine": 133
}
},
{
"Type": "Kubernetes Security Check",
"ID": "KSV003",
"Title": "Default capabilities not dropped",
"Description": "The container should drop all default capabilities and add only those that are needed for its execution.",
"Message": "Container 'app' of Deployment 'app' should add 'ALL' to 'securityContext.capabilities.drop'",
"Namespace": "builtin.kubernetes.KSV003",
"Query": "data.builtin.kubernetes.KSV003.deny",
"Resolution": "Add 'ALL' to containers[].securityContext.capabilities.drop.",
"Severity": "LOW",
"PrimaryURL": "https://avd.aquasec.com/misconfig/ksv003",
"References": [
"https://kubesec.io/basics/containers-securitycontext-capabilities-drop-index-all/",
"https://avd.aquasec.com/misconfig/ksv003"
],
"Status": "FAIL",
"Layer": {},
"IacMetadata": {
"Provider": "Kubernetes",
"Service": "general",
"StartLine": 121,
"EndLine": 133
}
}
]
}
]
},
{
"Namespace": "default",
"Kind": "ConfigMap",
"Name": "kube-root-ca.crt"
}
]
}
```
</details>
## Infra checks
Trivy by default scans kubernetes infra components (apiserver, controller-manager, scheduler and etcd)
if they exist under the `kube-system` namespace. For example, if you run a full cluster scan, or scan all
components under `kube-system` with commands:
```
$ trivy k8s cluster --report summary # full cluster scan
$ trivy k8s all -n kube-system --report summary # scan all componetns under kube-system
```
A table will be printed about misconfigurations found on kubernetes core components:
```
Summary Report for minikube
┌─────────────┬──────────────────────────────────────┬─────────────────────────────┐
│ Namespace │ Resource │ Kubernetes Infra Assessment │
│ │ ├────┬────┬────┬─────┬────────┤
│ │ │ C │ H │ M │ L │ U │
├─────────────┼──────────────────────────────────────┼────┼────┼────┼─────┼────────┤
│ kube-system │ Pod/kube-apiserver-minikube │ │ │ 1 │ 10 │ │
│ kube-system │ Pod/kube-controller-manager-minikube │ │ │ │ 3 │ │
│ kube-system │ Pod/kube-scheduler-minikube │ │ │ │ 1 │ │
└─────────────┴──────────────────────────────────────┴────┴────┴────┴─────┴────────┘
Severities: C=CRITICAL H=HIGH M=MEDIUM L=LOW U=UNKNOWN
```
The infra checks are based on CIS Benchmarks recommendations for kubernetes.
If you want filter only for the infra checks, you can use the flag `--components` along with the `--security-checks=config`
```
$ trivy k8s cluster --report summary --components=infra --security-checks=config # scan only infra
```
Or, to filter for all other checks besides the infra checks, you can:
```
$ trivy k8s cluster --report summary --components=workload --security-checks=config # scan all components besides infra
```

View File

@@ -0,0 +1,14 @@
# Trivy Operator
Trivy has a native [Kubernetes Operator][operator] which continuously scans your Kubernetes cluster for security issues, and generates security reports as Kubernetes [Custom Resources][crd]. It does it by watching Kubernetes for state changes and automatically triggering scans in response to changes, for example initiating a vulnerability scan when a new Pod is created.
> Kubernetes-native security toolkit. ([Documentation][trivy-operator]).
<figure>
<figcaption>Workload reconcilers discover K8s controllers, manage scan jobs, and create VulnerabilityReport and ConfigAuditReport objects.</figcaption>
</figure>
[operator]: https://kubernetes.io/docs/concepts/extend-kubernetes/operator/
[crd]: https://kubernetes.io/docs/concepts/extend-kubernetes/api-extension/custom-resources/
[trivy-operator]: https://aquasecurity.github.io/trivy-operator/latest

View File

@@ -0,0 +1,320 @@
# License Scanning
Trivy scans any container image for license files and offers an opinionated view on the risk associated with the license.
License are classified using the [Google License Classification][google-license-classification] -
- Forbidden
- Restricted
- Reciprocal
- Notice
- Permissive
- Unencumbered
- Unknown
!!! tip
Licenses that Trivy fails to recognize are classified as UNKNOWN.
As those licenses may be in violation, it is recommended to check those unknown licenses as well.
By default, Trivy scans licenses for packages installed by `apk`, `apt-get`, `dnf`, `npm`, `pip`, `gem`, etc.
To enable extended license scanning, you can use `--license-full`.
In addition to package licenses, Trivy scans source code files, Markdown documents, text files and `LICENSE` documents to identify license usage within the image or filesystem.
!!! note
The full license scanning is expensive. It takes a while.
Currently, the standard license scanning doesn't support filesystem and repository scanning.
| License scnanning | Image | Rootfs | Filesystem | Repository |
|:---------------------:|:-----:|:---------:|:----------:|:----------:|
| Standard | ✅ | ✅ | - | - |
| Full (--license-full) | ✅ | ✅ | ✅ | ✅ |
License checking classifies the identified licenses and map the classification to severity.
| Classification | Severity |
|----------------|----------|
| Forbidden | CRITICAL |
| Restricted | HIGH |
| Reciprocal | MEDIUM |
| Notice | LOW |
| Permissive | LOW |
| Unencumbered | LOW |
| Unknown | UNKNOWN |
## Quick start
This section shows how to scan license in container image and filesystem.
### Standard scanning
Specify an image name with `--security-cheks license`.
``` shell
$ trivy image --security-checks license --severity UNKNOWN,HIGH,CRITICAL alpine:3.15
2022-07-13T17:28:39.526+0300 INFO License scanning is enabled
OS Packages (license)
=====================
Total: 6 (UNKNOWN: 0, HIGH: 6, CRITICAL: 0)
┌───────────────────┬─────────┬────────────────┬──────────┐
│ Package │ License │ Classification │ Severity │
├───────────────────┼─────────┼────────────────┼──────────┤
│ alpine-baselayout │ GPL-2.0 │ Restricted │ HIGH │
├───────────────────┤ │ │ │
│ apk-tools │ │ │ │
├───────────────────┤ │ │ │
│ busybox │ │ │ │
├───────────────────┤ │ │ │
│ musl-utils │ │ │ │
├───────────────────┤ │ │ │
│ scanelf │ │ │ │
├───────────────────┤ │ │ │
│ ssl_client │ │ │ │
└───────────────────┴─────────┴────────────────┴──────────┘
```
### Full scanning
Specify `--license-full`
``` shell
$ trivy image --security-checks license --severity UNKNOWN,HIGH,CRITICAL --license-full grafana/grafana
2022-07-13T17:48:40.905+0300 INFO Full license scanning is enabled
OS Packages (license)
=====================
Total: 20 (UNKNOWN: 9, HIGH: 11, CRITICAL: 0)
┌───────────────────┬───────────────────┬────────────────┬──────────┐
│ Package │ License │ Classification │ Severity │
├───────────────────┼───────────────────┼────────────────┼──────────┤
│ alpine-baselayout │ GPL-2.0 │ Restricted │ HIGH │
├───────────────────┤ │ │ │
│ apk-tools │ │ │ │
├───────────────────┼───────────────────┤ │ │
│ bash │ GPL-3.0 │ │ │
├───────────────────┼───────────────────┼────────────────┼──────────┤
│ keyutils-libs │ GPL-2.0 │ Restricted │ HIGH │
│ ├───────────────────┼────────────────┼──────────┤
│ │ LGPL-2.0-or-later │ Non Standard │ UNKNOWN │
├───────────────────┼───────────────────┤ │ │
│ libaio │ LGPL-2.1-or-later │ │ │
├───────────────────┼───────────────────┼────────────────┼──────────┤
│ libcom_err │ GPL-2.0 │ Restricted │ HIGH │
│ ├───────────────────┼────────────────┼──────────┤
│ │ LGPL-2.0-or-later │ Non Standard │ UNKNOWN │
├───────────────────┼───────────────────┼────────────────┼──────────┤
│ tzdata │ Public-Domain │ Non Standard │ UNKNOWN │
└───────────────────┴───────────────────┴────────────────┴──────────┘
Loose File License(s) (license)
===============================
Total: 6 (UNKNOWN: 4, HIGH: 0, CRITICAL: 2)
┌────────────────┬──────────┬──────────────┬──────────────────────────────────────────────────────────────┐
│ Classification │ Severity │ License │ File Location │
├────────────────┼──────────┼──────────────┼──────────────────────────────────────────────────────────────┤
│ Forbidden │ CRITICAL │ AGPL-3.0 │ /usr/share/grafana/LICENSE │
│ │ │ │ │
│ │ │ │ │
├────────────────┼──────────┼──────────────┼──────────────────────────────────────────────────────────────┤
│ Non Standard │ UNKNOWN │ BSD-0-Clause │ /usr/share/grafana/public/build/5069.d6aae9dd11d49c741a80.j- │
│ │ │ │ s.LICENSE.txt │
│ │ │ ├──────────────────────────────────────────────────────────────┤
│ │ │ │ /usr/share/grafana/public/build/6444.d6aae9dd11d49c741a80.j- │
│ │ │ │ s.LICENSE.txt │
│ │ │ ├──────────────────────────────────────────────────────────────┤
│ │ │ │ /usr/share/grafana/public/build/7889.d6aae9dd11d49c741a80.j- │
│ │ │ │ s.LICENSE.txt │
│ │ │ ├──────────────────────────────────────────────────────────────┤
│ │ │ │ /usr/share/grafana/public/build/canvasPanel.d6aae9dd11d49c7- │
│ │ │ │ 41a80.js.LICENSE.txt │
└────────────────┴──────────┴──────────────┴──────────────────────────────────────────────────────────────┘
```
## Configuration
Trivy has number of configuration flags for use with license scanning;
### Ignored Licenses
Trivy license scanning can ignore licenses that are identified to explicitly remove them from the results using the `--ignored-licenses` flag;
```shell
$ trivy image --security-checks license --ignored-licenses MPL-2.0,MIT --severity LOW grafana/grafana:latest
2022-07-13T18:15:28.605Z INFO License scanning is enabled
OS Packages (license)
=====================
Total: 2 (HIGH: 2, CRITICAL: 0)
┌───────────────────┬─────────┬────────────────┬──────────┐
│ Package │ License │ Classification │ Severity │
├───────────────────┼─────────┼────────────────┼──────────┤
│ alpine-baselayout │ GPL-2.0 │ Restricted │ HIGH │
├───────────────────┤ │ │ │
│ ssl_client │ │ │ │
└───────────────────┴─────────┴────────────────┴──────────┘
```
### Custom Classification
You can generate the default config by the `--generate-default-config` flag and customize the license classification.
For example, if you want to forbid only AGPL-3.0, you can leave it under `forbidden` and move other licenses to another classification.
```shell
$ trivy image --generate-default-config
$ vim trivy.yaml
license:
forbidden:
- AGPL-3.0
restricted:
- AGPL-1.0
- CC-BY-NC-1.0
- CC-BY-NC-2.0
- CC-BY-NC-2.5
- CC-BY-NC-3.0
- CC-BY-NC-4.0
- CC-BY-NC-ND-1.0
- CC-BY-NC-ND-2.0
- CC-BY-NC-ND-2.5
- CC-BY-NC-ND-3.0
- CC-BY-NC-ND-4.0
- CC-BY-NC-SA-1.0
- CC-BY-NC-SA-2.0
- CC-BY-NC-SA-2.5
- CC-BY-NC-SA-3.0
- CC-BY-NC-SA-4.0
- Commons-Clause
- Facebook-2-Clause
- Facebook-3-Clause
- Facebook-Examples
- WTFPL
- BCL
- CC-BY-ND-1.0
- CC-BY-ND-2.0
- CC-BY-ND-2.5
- CC-BY-ND-3.0
- CC-BY-ND-4.0
- CC-BY-SA-1.0
- CC-BY-SA-2.0
- CC-BY-SA-2.5
- CC-BY-SA-3.0
- CC-BY-SA-4.0
- GPL-1.0
- GPL-2.0
- GPL-2.0-with-autoconf-exception
- GPL-2.0-with-bison-exception
- GPL-2.0-with-classpath-exception
- GPL-2.0-with-font-exception
- GPL-2.0-with-GCC-exception
- GPL-3.0
- GPL-3.0-with-autoconf-exception
- GPL-3.0-with-GCC-exception
- LGPL-2.0
- LGPL-2.1
- LGPL-3.0
- NPL-1.0
- NPL-1.1
- OSL-1.0
- OSL-1.1
- OSL-2.0
- OSL-2.1
- OSL-3.0
- QPL-1.0
- Sleepycat
reciprocal:
- APSL-1.0
- APSL-1.1
- APSL-1.2
- APSL-2.0
- CDDL-1.0
- CDDL-1.1
- CPL-1.0
- EPL-1.0
- EPL-2.0
- FreeImage
- IPL-1.0
- MPL-1.0
- MPL-1.1
- MPL-2.0
- Ruby
notice:
- AFL-1.1
- AFL-1.2
- AFL-2.0
- AFL-2.1
- AFL-3.0
- Apache-1.0
- Apache-1.1
- Apache-2.0
- Artistic-1.0-cl8
- Artistic-1.0-Perl
- Artistic-1.0
- Artistic-2.0
- BSL-1.0
- BSD-2-Clause-FreeBSD
- BSD-2-Clause-NetBSD
- BSD-2-Clause
- BSD-3-Clause-Attribution
- BSD-3-Clause-Clear
- BSD-3-Clause-LBNL
- BSD-3-Clause
- BSD-4-Clause
- BSD-4-Clause-UC
- BSD-Protection
- CC-BY-1.0
- CC-BY-2.0
- CC-BY-2.5
- CC-BY-3.0
- CC-BY-4.0
- FTL
- ISC
- ImageMagick
- Libpng
- Lil-1.0
- Linux-OpenIB
- LPL-1.02
- LPL-1.0
- MS-PL
- MIT
- NCSA
- OpenSSL
- PHP-3.01
- PHP-3.0
- PIL
- Python-2.0
- Python-2.0-complete
- PostgreSQL
- SGI-B-1.0
- SGI-B-1.1
- SGI-B-2.0
- Unicode-DFS-2015
- Unicode-DFS-2016
- Unicode-TOU
- UPL-1.0
- W3C-19980720
- W3C-20150513
- W3C
- X11
- Xnet
- Zend-2.0
- zlib-acknowledgement
- Zlib
- ZPL-1.1
- ZPL-2.0
- ZPL-2.1
unencumbered:
- CC0-1.0
- Unlicense
- 0BSD
permissive: []
```
[google-license-classification]: https://opensource.google/documentation/reference/thirdparty/licenses

View File

@@ -3,20 +3,19 @@
Trivy uses cfsec internally to scan both JSON and YAML configuration files, but Trivy doesn't support some features provided by cfsec.
This section describes the differences between Trivy and cfsec.
| Feature | Trivy | cfsec |
| --------------------------- | --------------------------------------- | -------------------- |
| Built-in Policies | :material-check: | :material-check: |
| Custom Policies | Rego[^1] | :material-close: |
| Policy Metadata[^2] | :material-check: | :material-check: |
| Show Successes | :material-check: | :material-check: |
| Disable Policies | :material-check: | :material-check: |
| Show Issue Lines | :material-close: | :material-check: |
| View Statistics | :material-close: | :material-check: |
| Filtering by Severity | :material-check: | :material-close: |
| Supported Formats | Dockerfile, JSON, YAML, Terraform, etc. | CloudFormation JSON and YAML |
| Feature | Trivy | cfsec |
|-----------------------|--------------------------------------------------------|------------------------------|
| Built-in Policies | :material-check: | :material-check: |
| Custom Policies | :material-check: | :material-close: |
| Policy Metadata[^1] | :material-check: | :material-check: |
| Show Successes | :material-check: | :material-check: |
| Disable Policies | :material-check: | :material-check: |
| Show Issue Lines | :material-check: | :material-check: |
| View Statistics | :material-close: | :material-check: |
| Filtering by Severity | :material-check: | :material-close: |
| Supported Formats | Dockerfile, JSON, YAML, Terraform, CloudFormation etc. | CloudFormation JSON and YAML |
[^1]: CloudFormation files are not supported
[^2]: To enrich the results such as ID, Title, Description, Severity, etc.
[^1]: To enrich the results such as ID, Title, Description, Severity, etc.
cfsec is designed for CloudFormation.
People who use only want to scan their CloudFormation templates should use cfsec.

View File

@@ -3,21 +3,20 @@
Trivy uses tfsec internally to scan Terraform HCL files, but Trivy doesn't support some features provided by tfsec.
This section describes the differences between Trivy and tfsec.
| Feature | Trivy | tfsec |
| --------------------------- | --------------------------------------- | -------------------- |
| Built-in Policies | :material-check: | :material-check: |
| Custom Policies | Rego[^1] | JSON and YAML |
| Policy Metadata[^2] | :material-check: | :material-check: |
| Show Successes | :material-check: | :material-check: |
| Disable Policies | :material-check: | :material-check: |
| Show Issue Lines | :material-close: | :material-check: |
| Support .tfvars | :material-close: | :material-check: |
| View Statistics | :material-close: | :material-check: |
| Filtering by Severity | :material-check: | :material-close: |
| Supported Formats | Dockerfile, JSON, YAML, Terraform, etc. | Terraform |
| Feature | Trivy | tfsec |
|-----------------------|--------------------------------------------------------|----------------------|
| Built-in Policies | :material-check: | :material-check: |
| Custom Policies | Rego | Rego, JSON, and YAML |
| Policy Metadata[^1] | :material-check: | :material-check: |
| Show Successes | :material-check: | :material-check: |
| Disable Policies | :material-check: | :material-check: |
| Show Issue Lines | :material-check: | :material-check: |
| Support .tfvars | :material-close: | :material-check: |
| View Statistics | :material-close: | :material-check: |
| Filtering by Severity | :material-check: | :material-check: |
| Supported Formats | Dockerfile, JSON, YAML, Terraform, CloudFormation etc. | Terraform |
[^1]: Terraform HCL files are not supported.
[^2]: To enrich the results such as ID, Title, Description, Severity, etc.
[^1]: To enrich the results such as ID, Title, Description, Severity, etc.
tfsec is designed for Terraform.
People who use only Terraform should use tfsec.

View File

@@ -6,38 +6,209 @@ This will output a large trace from Open Policy Agent like the following:
!!! tip
Only failed policies show traces. If you want to debug a passed policy, you need to make it fail on purpose.
```bash
```shell
$ trivy conf --trace configs/
2021-07-11T16:45:58.493+0300 INFO Detected config files: 1
2022-05-16T13:47:58.853+0100 INFO Detected config files: 1
Dockerfile (dockerfile)
=======================
Tests: 23 (SUCCESSES: 22, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 1, CRITICAL: 0)
Tests: 23 (SUCCESSES: 21, FAILURES: 2, EXCEPTIONS: 0)
Failures: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 1, CRITICAL: 0)
MEDIUM: Specify a tag in the 'FROM' statement for image 'alpine'
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
When using a 'FROM' statement you should use a specific tag to avoid uncontrolled behavior when the image is updated.
See https://avd.aquasec.com/misconfig/ds001
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Dockerfile:1
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 [ FROM alpine:latest
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
HIGH: Last USER command in Dockerfile should not be 'root'
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Running containers with 'root' user can lead to a container escape situation. It is a best practice to run containers as non-root users, which can be done by adding a 'USER' statement to the Dockerfile.
See https://avd.aquasec.com/misconfig/ds002
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Dockerfile:3
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
3 [ USER root
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
ID: DS001
File: Dockerfile
Namespace: builtin.dockerfile.DS001
Query: data.builtin.dockerfile.DS001.deny
Message: Specify a tag in the 'FROM' statement for image 'alpine'
TRACE Enter data.builtin.dockerfile.DS001.deny = _
TRACE | Eval data.builtin.dockerfile.DS001.deny = _
TRACE | Index data.builtin.dockerfile.DS001.deny (matched 1 rule)
TRACE | Enter data.builtin.dockerfile.DS001.deny
TRACE | | Eval output = data.builtin.dockerfile.DS001.fail_latest[_]
TRACE | | Index data.builtin.dockerfile.DS001.fail_latest (matched 1 rule)
TRACE | | Enter data.builtin.dockerfile.DS001.fail_latest
TRACE | | | Eval output = data.builtin.dockerfile.DS001.image_tags[_]
TRACE | | | Index data.builtin.dockerfile.DS001.image_tags (matched 2 rules)
TRACE | | | Enter data.builtin.dockerfile.DS001.image_tags
TRACE | | | | Eval from = data.lib.docker.from[_]
TRACE | | | | Index data.lib.docker.from (matched 1 rule)
TRACE | | | | Enter data.lib.docker.from
TRACE | | | | | Eval instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "from"
TRACE | | | | | Exit data.lib.docker.from
TRACE | | | | Redo data.lib.docker.from
TRACE | | | | | Redo instruction.Cmd = "from"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "from"
TRACE | | | | | Fail instruction.Cmd = "from"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "from"
TRACE | | | | | Fail instruction.Cmd = "from"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | Eval name = from.Value[0]
TRACE | | | | Eval not startswith(name, "$")
TRACE | | | | Enter startswith(name, "$")
TRACE | | | | | Eval startswith(name, "$")
TRACE | | | | | Fail startswith(name, "$")
TRACE | | | | Eval data.builtin.dockerfile.DS001.parse_tag(name, __local505__)
TRACE | | | | Index data.builtin.dockerfile.DS001.parse_tag (matched 2 rules)
TRACE | | | | Enter data.builtin.dockerfile.DS001.parse_tag
TRACE | | | | | Eval split(name, ":", __local504__)
TRACE | | | | | Eval [img, tag] = __local504__
TRACE | | | | | Exit data.builtin.dockerfile.DS001.parse_tag
TRACE | | | | Eval [img, tag] = __local505__
TRACE | | | | Eval output = {"cmd": from, "img": img, "tag": tag}
TRACE | | | | Exit data.builtin.dockerfile.DS001.image_tags
TRACE | | | Redo data.builtin.dockerfile.DS001.image_tags
TRACE | | | | Redo output = {"cmd": from, "img": img, "tag": tag}
TRACE | | | | Redo [img, tag] = __local505__
TRACE | | | | Redo data.builtin.dockerfile.DS001.parse_tag(name, __local505__)
TRACE | | | | Redo data.builtin.dockerfile.DS001.parse_tag
TRACE | | | | | Redo [img, tag] = __local504__
TRACE | | | | | Redo split(name, ":", __local504__)
TRACE | | | | Enter data.builtin.dockerfile.DS001.parse_tag
TRACE | | | | | Eval tag = "latest"
TRACE | | | | | Eval not contains(img, ":")
TRACE | | | | | Enter contains(img, ":")
TRACE | | | | | | Eval contains(img, ":")
TRACE | | | | | | Exit contains(img, ":")
TRACE | | | | | Redo contains(img, ":")
TRACE | | | | | | Redo contains(img, ":")
TRACE | | | | | Fail not contains(img, ":")
TRACE | | | | | Redo tag = "latest"
TRACE | | | | Redo name = from.Value[0]
TRACE | | | | Redo from = data.lib.docker.from[_]
TRACE | | | Enter data.builtin.dockerfile.DS001.image_tags
TRACE | | | | Eval from = data.lib.docker.from[i]
TRACE | | | | Index data.lib.docker.from (matched 1 rule)
TRACE | | | | Eval name = from.Value[0]
TRACE | | | | Eval cmd_obj = input.stages[j][k]
TRACE | | | | Eval possibilities = {"arg", "env"}
TRACE | | | | Eval cmd_obj.Cmd = possibilities[l]
TRACE | | | | Fail cmd_obj.Cmd = possibilities[l]
TRACE | | | | Redo possibilities = {"arg", "env"}
TRACE | | | | Redo cmd_obj = input.stages[j][k]
TRACE | | | | Eval possibilities = {"arg", "env"}
TRACE | | | | Eval cmd_obj.Cmd = possibilities[l]
TRACE | | | | Fail cmd_obj.Cmd = possibilities[l]
TRACE | | | | Redo possibilities = {"arg", "env"}
TRACE | | | | Redo cmd_obj = input.stages[j][k]
TRACE | | | | Eval possibilities = {"arg", "env"}
TRACE | | | | Eval cmd_obj.Cmd = possibilities[l]
TRACE | | | | Fail cmd_obj.Cmd = possibilities[l]
TRACE | | | | Redo possibilities = {"arg", "env"}
TRACE | | | | Redo cmd_obj = input.stages[j][k]
TRACE | | | | Redo name = from.Value[0]
TRACE | | | | Redo from = data.lib.docker.from[i]
TRACE | | | Eval __local752__ = output.img
TRACE | | | Eval neq(__local752__, "scratch")
TRACE | | | Eval __local753__ = output.img
TRACE | | | Eval not data.builtin.dockerfile.DS001.is_alias(__local753__)
TRACE | | | Enter data.builtin.dockerfile.DS001.is_alias(__local753__)
TRACE | | | | Eval data.builtin.dockerfile.DS001.is_alias(__local753__)
TRACE | | | | Index data.builtin.dockerfile.DS001.is_alias (matched 1 rule, early exit)
TRACE | | | | Enter data.builtin.dockerfile.DS001.is_alias
TRACE | | | | | Eval img = data.builtin.dockerfile.DS001.get_aliases[_]
TRACE | | | | | Index data.builtin.dockerfile.DS001.get_aliases (matched 1 rule)
TRACE | | | | | Enter data.builtin.dockerfile.DS001.get_aliases
TRACE | | | | | | Eval from_cmd = data.lib.docker.from[_]
TRACE | | | | | | Index data.lib.docker.from (matched 1 rule)
TRACE | | | | | | Eval __local749__ = from_cmd.Value
TRACE | | | | | | Eval data.builtin.dockerfile.DS001.get_alias(__local749__, __local503__)
TRACE | | | | | | Index data.builtin.dockerfile.DS001.get_alias (matched 1 rule)
TRACE | | | | | | Enter data.builtin.dockerfile.DS001.get_alias
TRACE | | | | | | | Eval __local748__ = values[i]
TRACE | | | | | | | Eval lower(__local748__, __local501__)
TRACE | | | | | | | Eval "as" = __local501__
TRACE | | | | | | | Fail "as" = __local501__
TRACE | | | | | | | Redo lower(__local748__, __local501__)
TRACE | | | | | | | Redo __local748__ = values[i]
TRACE | | | | | | Fail data.builtin.dockerfile.DS001.get_alias(__local749__, __local503__)
TRACE | | | | | | Redo __local749__ = from_cmd.Value
TRACE | | | | | | Redo from_cmd = data.lib.docker.from[_]
TRACE | | | | | Fail img = data.builtin.dockerfile.DS001.get_aliases[_]
TRACE | | | | Fail data.builtin.dockerfile.DS001.is_alias(__local753__)
TRACE | | | Eval output.tag = "latest"
TRACE | | | Exit data.builtin.dockerfile.DS001.fail_latest
TRACE | | Redo data.builtin.dockerfile.DS001.fail_latest
TRACE | | | Redo output.tag = "latest"
TRACE | | | Redo __local753__ = output.img
TRACE | | | Redo neq(__local752__, "scratch")
TRACE | | | Redo __local752__ = output.img
TRACE | | | Redo output = data.builtin.dockerfile.DS001.image_tags[_]
TRACE | | Eval __local754__ = output.img
TRACE | | Eval sprintf("Specify a tag in the 'FROM' statement for image '%s'", [__local754__], __local509__)
TRACE | | Eval msg = __local509__
TRACE | | Eval __local755__ = output.cmd
TRACE | | Eval data.lib.docker.result(msg, __local755__, __local510__)
TRACE | | Index data.lib.docker.result (matched 1 rule)
TRACE | | Enter data.lib.docker.result
TRACE | | | Eval object.get(cmd, "EndLine", 0, __local470__)
TRACE | | | Eval object.get(cmd, "Path", "", __local471__)
TRACE | | | Eval object.get(cmd, "StartLine", 0, __local472__)
TRACE | | | Eval result = {"endline": __local470__, "filepath": __local471__, "msg": msg, "startline": __local472__}
TRACE | | | Exit data.lib.docker.result
TRACE | | Eval res = __local510__
TRACE | | Exit data.builtin.dockerfile.DS001.deny
TRACE | Redo data.builtin.dockerfile.DS001.deny
TRACE | | Redo res = __local510__
TRACE | | Redo data.lib.docker.result(msg, __local755__, __local510__)
TRACE | | Redo data.lib.docker.result
TRACE | | | Redo result = {"endline": __local470__, "filepath": __local471__, "msg": msg, "startline": __local472__}
TRACE | | | Redo object.get(cmd, "StartLine", 0, __local472__)
TRACE | | | Redo object.get(cmd, "Path", "", __local471__)
TRACE | | | Redo object.get(cmd, "EndLine", 0, __local470__)
TRACE | | Redo __local755__ = output.cmd
TRACE | | Redo msg = __local509__
TRACE | | Redo sprintf("Specify a tag in the 'FROM' statement for image '%s'", [__local754__], __local509__)
TRACE | | Redo __local754__ = output.img
TRACE | | Redo output = data.builtin.dockerfile.DS001.fail_latest[_]
TRACE | Exit data.builtin.dockerfile.DS001.deny = _
TRACE Redo data.builtin.dockerfile.DS001.deny = _
TRACE | Redo data.builtin.dockerfile.DS001.deny = _
TRACE
+---------------------------+------------+----------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+----------------------+----------+------------------------------------------+
| Dockerfile Security Check | DS002 | Image user is 'root' | HIGH | Last USER command in |
| | | | | Dockerfile should not be 'root' |
| | | | | -->avd.aquasec.com/appshield/ds002 |
+---------------------------+------------+----------------------+----------+------------------------------------------+
ID: DS002
File: Dockerfile
Namespace: appshield.dockerfile.DS002
Query: data.appshield.dockerfile.DS002.deny
Namespace: builtin.dockerfile.DS002
Query: data.builtin.dockerfile.DS002.deny
Message: Last USER command in Dockerfile should not be 'root'
TRACE Enter data.appshield.dockerfile.DS002.deny = _
TRACE | Eval data.appshield.dockerfile.DS002.deny = _
TRACE | Index data.appshield.dockerfile.DS002.deny matched 2 rules)
TRACE | Enter data.appshield.dockerfile.DS002.deny
TRACE | | Eval data.appshield.dockerfile.DS002.fail_user_count
TRACE | | Index data.appshield.dockerfile.DS002.fail_user_count (matched 1 rule)
TRACE | | Enter data.appshield.dockerfile.DS002.fail_user_count
TRACE | | | Eval __local559__ = data.appshield.dockerfile.DS002.get_user
TRACE | | | Index data.appshield.dockerfile.DS002.get_user (matched 1 rule)
TRACE | | | Enter data.appshield.dockerfile.DS002.get_user
TRACE Enter data.builtin.dockerfile.DS002.deny = _
TRACE | Eval data.builtin.dockerfile.DS002.deny = _
TRACE | Index data.builtin.dockerfile.DS002.deny (matched 2 rules)
TRACE | Enter data.builtin.dockerfile.DS002.deny
TRACE | | Eval data.builtin.dockerfile.DS002.fail_user_count
TRACE | | Index data.builtin.dockerfile.DS002.fail_user_count (matched 1 rule, early exit)
TRACE | | Enter data.builtin.dockerfile.DS002.fail_user_count
TRACE | | | Eval __local771__ = data.builtin.dockerfile.DS002.get_user
TRACE | | | Index data.builtin.dockerfile.DS002.get_user (matched 1 rule)
TRACE | | | Enter data.builtin.dockerfile.DS002.get_user
TRACE | | | | Eval user = data.lib.docker.user[_]
TRACE | | | | Index data.lib.docker.user (matched 1 rule)
TRACE | | | | Enter data.lib.docker.user
@@ -46,180 +217,88 @@ TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Exit data.lib.docker.user
TRACE | | | | Eval username = user.Value[_]
TRACE | | | | Exit data.appshield.dockerfile.DS002.get_user
TRACE | | | Redo data.appshield.dockerfile.DS002.get_user
TRACE | | | | Redo username = user.Value[_]
TRACE | | | | Redo user = data.lib.docker.user[_]
TRACE | | | | Redo data.lib.docker.user
TRACE | | | | | Redo instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Exit data.lib.docker.user
TRACE | | | | Eval username = user.Value[_]
TRACE | | | | Exit data.appshield.dockerfile.DS002.get_user
TRACE | | | Redo data.appshield.dockerfile.DS002.get_user
TRACE | | | | Redo username = user.Value[_]
TRACE | | | | Redo user = data.lib.docker.user[_]
TRACE | | | | Redo data.lib.docker.user
TRACE | | | | | Redo instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | Eval count(__local559__, __local391__)
TRACE | | | Eval lt(__local391__, 1)
TRACE | | | Fail lt(__local391__, 1)
TRACE | | | Redo count(__local559__, __local391__)
TRACE | | | Redo __local559__ = data.appshield.dockerfile.DS002.get_user
TRACE | | Fail data.appshield.dockerfile.DS002.fail_user_count
TRACE | Enter data.appshield.dockerfile.DS002.deny
TRACE | | Eval data.appshield.dockerfile.DS002.fail_last_user_root
TRACE | | Index data.appshield.dockerfile.DS002.fail_last_user_root (matched 1 rule)
TRACE | | Enter data.appshield.dockerfile.DS002.fail_last_user_root
TRACE | | | Eval __local560__ = data.appshield.dockerfile.DS002.get_user
TRACE | | | Index data.appshield.dockerfile.DS002.get_user (matched 1 rule)
TRACE | | | Enter data.appshield.dockerfile.DS002.get_user
TRACE | | | | Eval user = data.lib.docker.user[_]
TRACE | | | | Index data.lib.docker.user (matched 1 rule)
TRACE | | | | Enter data.lib.docker.user
TRACE | | | | | Eval instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Exit data.lib.docker.user
TRACE | | | | Eval username = user.Value[_]
TRACE | | | | Exit data.appshield.dockerfile.DS002.get_user
TRACE | | | Redo data.appshield.dockerfile.DS002.get_user
TRACE | | | | Exit data.builtin.dockerfile.DS002.get_user
TRACE | | | Redo data.builtin.dockerfile.DS002.get_user
TRACE | | | | Redo username = user.Value[_]
TRACE | | | | Redo user = data.lib.docker.user[_]
TRACE | | | | Redo data.lib.docker.user
TRACE | | | | | Redo instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Exit data.lib.docker.user
TRACE | | | | Eval username = user.Value[_]
TRACE | | | | Exit data.appshield.dockerfile.DS002.get_user
TRACE | | | Redo data.appshield.dockerfile.DS002.get_user
TRACE | | | | Redo username = user.Value[_]
TRACE | | | | Redo user = data.lib.docker.user[_]
TRACE | | | | Redo data.lib.docker.user
TRACE | | | | | Redo instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | Eval cast_array(__local560__, __local392__)
TRACE | | | Eval user = __local392__
TRACE | | | Eval __local561__ = data.appshield.dockerfile.DS002.get_user
TRACE | | | Index data.appshield.dockerfile.DS002.get_user (matched 1 rule)
TRACE | | | Enter data.appshield.dockerfile.DS002.get_user
TRACE | | | | Eval user = data.lib.docker.user[_]
TRACE | | | | Index data.lib.docker.user (matched 1 rule)
TRACE | | | | Enter data.lib.docker.user
TRACE | | | | | Eval instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Exit data.lib.docker.user
TRACE | | | | Eval username = user.Value[_]
TRACE | | | | Exit data.appshield.dockerfile.DS002.get_user
TRACE | | | Redo data.appshield.dockerfile.DS002.get_user
TRACE | | | | Redo username = user.Value[_]
TRACE | | | | Redo user = data.lib.docker.user[_]
TRACE | | | | Redo data.lib.docker.user
TRACE | | | | | Redo instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Exit data.lib.docker.user
TRACE | | | | Eval username = user.Value[_]
TRACE | | | | Exit data.appshield.dockerfile.DS002.get_user
TRACE | | | Redo data.appshield.dockerfile.DS002.get_user
TRACE | | | | Redo username = user.Value[_]
TRACE | | | | Redo user = data.lib.docker.user[_]
TRACE | | | | Redo data.lib.docker.user
TRACE | | | | | Redo instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | | | Eval instruction.Cmd = "user"
TRACE | | | | | Fail instruction.Cmd = "user"
TRACE | | | | | Redo instruction = input.stages[_][_]
TRACE | | | Eval count(__local561__, __local393__)
TRACE | | | Eval len = __local393__
TRACE | | | Eval minus(len, 1, __local394__)
TRACE | | | Eval user[__local394__] = "root"
TRACE | | | Exit data.appshield.dockerfile.DS002.fail_last_user_root
TRACE | | Eval res = "Last USER command in Dockerfile should not be 'root'"
TRACE | | Exit data.appshield.dockerfile.DS002.deny
TRACE | Redo data.appshield.dockerfile.DS002.deny
TRACE | | Redo res = "Last USER command in Dockerfile should not be 'root'"
TRACE | | Redo data.appshield.dockerfile.DS002.fail_last_user_root
TRACE | | Redo data.appshield.dockerfile.DS002.fail_last_user_root
TRACE | | | Redo user[__local394__] = "root"
TRACE | | | Redo minus(len, 1, __local394__)
TRACE | | | Redo len = __local393__
TRACE | | | Redo count(__local561__, __local393__)
TRACE | | | Redo __local561__ = data.appshield.dockerfile.DS002.get_user
TRACE | | | Redo user = __local392__
TRACE | | | Redo cast_array(__local560__, __local392__)
TRACE | | | Redo __local560__ = data.appshield.dockerfile.DS002.get_user
TRACE | Exit data.appshield.dockerfile.DS002.deny = _
TRACE Redo data.appshield.dockerfile.DS002.deny = _
TRACE | Redo data.appshield.dockerfile.DS002.deny = _
TRACE | | | Eval count(__local771__, __local536__)
TRACE | | | Eval lt(__local536__, 1)
TRACE | | | Fail lt(__local536__, 1)
TRACE | | | Redo count(__local771__, __local536__)
TRACE | | | Redo __local771__ = data.builtin.dockerfile.DS002.get_user
TRACE | | Fail data.builtin.dockerfile.DS002.fail_user_count
TRACE | Enter data.builtin.dockerfile.DS002.deny
TRACE | | Eval cmd = data.builtin.dockerfile.DS002.fail_last_user_root[_]
TRACE | | Index data.builtin.dockerfile.DS002.fail_last_user_root (matched 1 rule)
TRACE | | Enter data.builtin.dockerfile.DS002.fail_last_user_root
TRACE | | | Eval stage_users = data.lib.docker.stage_user[_]
TRACE | | | Index data.lib.docker.stage_user (matched 1 rule)
TRACE | | | Enter data.lib.docker.stage_user
TRACE | | | | Eval stage = input.stages[stage_name]
TRACE | | | | Eval users = [cmd | cmd = stage[_]; cmd.Cmd = "user"]
TRACE | | | | Enter cmd = stage[_]; cmd.Cmd = "user"
TRACE | | | | | Eval cmd = stage[_]
TRACE | | | | | Eval cmd.Cmd = "user"
TRACE | | | | | Fail cmd.Cmd = "user"
TRACE | | | | | Redo cmd = stage[_]
TRACE | | | | | Eval cmd.Cmd = "user"
TRACE | | | | | Exit cmd = stage[_]; cmd.Cmd = "user"
TRACE | | | | Redo cmd = stage[_]; cmd.Cmd = "user"
TRACE | | | | | Redo cmd.Cmd = "user"
TRACE | | | | | Redo cmd = stage[_]
TRACE | | | | | Eval cmd.Cmd = "user"
TRACE | | | | | Fail cmd.Cmd = "user"
TRACE | | | | | Redo cmd = stage[_]
TRACE | | | | Exit data.lib.docker.stage_user
TRACE | | | Redo data.lib.docker.stage_user
TRACE | | | | Redo users = [cmd | cmd = stage[_]; cmd.Cmd = "user"]
TRACE | | | | Redo stage = input.stages[stage_name]
TRACE | | | Eval count(stage_users, __local537__)
TRACE | | | Eval len = __local537__
TRACE | | | Eval minus(len, 1, __local538__)
TRACE | | | Eval last = stage_users[__local538__]
TRACE | | | Eval user = last.Value[0]
TRACE | | | Eval user = "root"
TRACE | | | Exit data.builtin.dockerfile.DS002.fail_last_user_root
TRACE | | Redo data.builtin.dockerfile.DS002.fail_last_user_root
TRACE | | | Redo user = "root"
TRACE | | | Redo user = last.Value[0]
TRACE | | | Redo last = stage_users[__local538__]
TRACE | | | Redo minus(len, 1, __local538__)
TRACE | | | Redo len = __local537__
TRACE | | | Redo count(stage_users, __local537__)
TRACE | | | Redo stage_users = data.lib.docker.stage_user[_]
TRACE | | Eval msg = "Last USER command in Dockerfile should not be 'root'"
TRACE | | Eval data.lib.docker.result(msg, cmd, __local540__)
TRACE | | Index data.lib.docker.result (matched 1 rule)
TRACE | | Enter data.lib.docker.result
TRACE | | | Eval object.get(cmd, "EndLine", 0, __local470__)
TRACE | | | Eval object.get(cmd, "Path", "", __local471__)
TRACE | | | Eval object.get(cmd, "StartLine", 0, __local472__)
TRACE | | | Eval result = {"endline": __local470__, "filepath": __local471__, "msg": msg, "startline": __local472__}
TRACE | | | Exit data.lib.docker.result
TRACE | | Eval res = __local540__
TRACE | | Exit data.builtin.dockerfile.DS002.deny
TRACE | Redo data.builtin.dockerfile.DS002.deny
TRACE | | Redo res = __local540__
TRACE | | Redo data.lib.docker.result(msg, cmd, __local540__)
TRACE | | Redo data.lib.docker.result
TRACE | | | Redo result = {"endline": __local470__, "filepath": __local471__, "msg": msg, "startline": __local472__}
TRACE | | | Redo object.get(cmd, "StartLine", 0, __local472__)
TRACE | | | Redo object.get(cmd, "Path", "", __local471__)
TRACE | | | Redo object.get(cmd, "EndLine", 0, __local470__)
TRACE | | Redo msg = "Last USER command in Dockerfile should not be 'root'"
TRACE | | Redo cmd = data.builtin.dockerfile.DS002.fail_last_user_root[_]
TRACE | Exit data.builtin.dockerfile.DS002.deny = _
TRACE Redo data.builtin.dockerfile.DS002.deny = _
TRACE | Redo data.builtin.dockerfile.DS002.deny = _
TRACE
```

View File

@@ -6,7 +6,7 @@ See [here][k8s].
The custom policy is defined in `user.kubernetes.ID001` package.
You need to pass the package prefix you want to evaluate through `--namespaces` option.
In this case, the package prefix should be `user`, `user.kuberntes`, or `user.kubernetes.ID001`.
In this case, the package prefix should be `user`, `user.kubernetes`, or `user.kubernetes.ID001`.
### Dockerfile
See [here][dockerfile].

View File

@@ -13,50 +13,46 @@ As for `--namespaces` option, the detail is described as below.
### File formats
If a file name matches the following file patterns, Trivy will parse the file and pass it as input to your Rego policy.
| File format | File pattern |
| -------------- | ------------------------------------------------ |
| JSON | `*.json` |
| YAML | `*.yaml` |
| TOML | `*.toml` |
| HCL | `*.hcl`, `*.hcl1`, and `*.hcl2` |
| Dockerfile | `Dockerfile`, `Dockerfile.*`, and `*.Dockerfile` |
| File format | File pattern |
|---------------|-----------------------------------------------------------|
| JSON | `*.json` |
| YAML | `*.yaml` and `*.yml` |
| Dockerfile | `Dockerfile`, `Dockerfile.*`, and `*.Dockerfile` |
| Containerfile | `Containerfile`, `Containerfile.*`, and `*.Containerfile` |
| Terraform | `*.tf` and `*.tf.json` |
### Configuration languages
In the above general file formats, Trivy automatically identifies the following types of configuration files:
- Ansible (YAML)
- CloudFormation (JSON/YAML)
- Kubernetes (JSON/YAML)
- Helm (YAML)
- Terraform Plan (JSON)
This is useful for filtering inputs, as described below.
!!! warning
Custom policies do not support Terraform at the moment.
## Rego format
A single package must contain only one policy.
!!!example
``` rego
# METADATA
# title: Deployment not allowed
# description: Deployments are not allowed because of some reasons.
# schemas:
# - input: schema.input
# custom:
# id: ID001
# severity: LOW
# input:
# selector:
# - type: kubernetes
package user.kubernetes.ID001
__rego_metadata__ := {
"id": "ID001",
"title": "Deployment not allowed",
"severity": "LOW",
"type": "Custom Kubernetes Check",
"description": "Deployments are not allowed because of some reasons.",
}
__rego_input__ := {
"selector": [
{"type": "kubernetes"},
],
}
deny[msg] {
input.kind == "Deployment"
msg = sprintf("Found deployment '%s' but deployments are not allowed", [input.metadata.name])
deny[res] {
input.kind == "Deployment"
msg := sprintf("Found deployment '%s' but deployments are not allowed", [input.metadata.name])
res := result.new(msg, input.kind)
}
```
@@ -65,6 +61,10 @@ If you add a new custom policy, it must be defined under a new package like `use
### Policy structure
`# METADATA` (optional)
: - SHOULD be defined for clarity since these values will be displayed in the scan results
- `custom.input` SHOULD be set to indicate the input type the policy should be applied to. See [list of available types](https://github.com/aquasecurity/defsec/blob/418759b4dc97af25f30f32e0bd365be7984003a1/pkg/types/sources.go)
`package` (required)
: - MUST follow the Rego's [specification][package]
- MUST be unique per policy
@@ -72,18 +72,14 @@ If you add a new custom policy, it must be defined under a new package like `use
- MAY include the group name such as `kubernetes` for clarity
- Group name has no effect on policy evaluation
`__rego_metadata__` (optional)
: - SHOULD be defined for clarity since these values will be displayed in the scan results
`__rego_input__` (optional)
: - MAY be defined when you want to specify input format
`deny` (required)
: - SHOULD be `deny` or start with `deny_`
- Although `warn`, `warn_*`, `violation`, `violation_` also work for compatibility, `deny` is recommended as severity can be defined in `__rego_metadata__`.
- SHOULD return `string`
- Although `object` with `msg` field is accepted, other fields are dropped and `string` is recommended.
- e.g. `{"msg": "deny message", "details": "something"}`
- SHOULD return ONE OF:
- The result of a call to `result.new(msg, cause)`. The `msg` is a `string` describing the issue occurrence, and the `cause` is the property/object where the issue occurred. Providing this allows Trivy to ascertain line numbers and highlight code in the output.
- A `string` denoting the detected issue
- Although `object` with `msg` field is accepted, other fields are dropped and `string` is recommended if `result.new()` is not utilised.
- e.g. `{"msg": "deny message", "details": "something"}`
### Package
@@ -94,7 +90,7 @@ A package name must be unique per policy.
package user.kubernetes.ID001
```
By default, only `appshield.*` packages will be evaluated.
By default, only `builtin.*` packages will be evaluated.
If you define custom packages, you have to specify the package prefix via `--namespaces` option.
``` bash
@@ -107,77 +103,107 @@ Any package prefixes such as `main` and `user` are allowed.
### Metadata
Metadata helps enrich Trivy's scan results with useful information.
The annotation format is described in the [OPA documentation](https://www.openpolicyagent.org/docs/latest/annotations/).
Trivy supports extra fields in the `custom` section as described below.
!!!example
``` rego
__rego_metadata__ := {
"id": "ID001",
"title": "Deployment not allowed",
"severity": "LOW",
"type": "Custom Kubernetes Check",
"description": "Deployments are not allowed because of some reasons.",
"recommended_actions": "Remove Deployment",
"url": "https://cloud.google.com/blog/products/containers-kubernetes/kubernetes-best-practices-resource-requests-and-limits",
}
# METADATA
# title: Deployment not allowed
# description: Deployments are not allowed because of some reasons.
# custom:
# id: ID001
# severity: LOW
# input:
# selector:
# - type: kubernetes
```
All fields under `__rego_metadata__` are optional.
All fields are optional. The `schemas` field should be used to enable policy validation using a built-in schema. The
schema that will be used is based on the input document type. It is recommended to use this to ensure your policies are
correct and do not reference incorrect properties/values.
| Field name | Allowed values | Default value | In table | In JSON |
|----------------------------|------------------------------------------|:----------------------------:|:----------------:|:----------------:|
| title | Any characters | N/A | :material-check: | :material-check: |
| description | Any characters | | :material-close: | :material-check: |
| schemas.input | `schema.input` | (applied to all input types) | :material-close: | :material-close: |
| custom.id | Any characters | N/A | :material-check: | :material-check: |
| custom.severity | `LOW`, `MEDIUM`, `HIGH`, `CRITICAL` | UNKNOWN | :material-check: | :material-check: |
| custom.recommended_actions | Any characters | | :material-close: | :material-check: |
| custom.input.selector.type | Any item(s) in [this list][source-types] | | :material-close: | :material-check: |
| url | Any characters | | :material-close: | :material-check: |
| Field name | Allowed values | Default value | In table | In JSON |
| ------------------ | ------------------------------------| :-----------: | :----------------: |:---------------: |
| id | Any characters | N/A | :material-check: | :material-check: |
| title | Any characters | N/A | :material-check: | :material-check: |
| severity | `LOW`, `MEDIUM`, `HIGH`, `CRITICAL` | UNKNOWN | :material-check: | :material-check: |
| type | Any characters | N/A | :material-check: | :material-check: |
| description | Any characters | | :material-close: | :material-check: |
| recommended_actions| Any characters | | :material-close: | :material-check: |
| url | Any characters | | :material-close: | :material-check: |
Some fields are displayed in scan results.
``` bash
deployment.yaml (kubernetes)
============================
Tests: 28 (SUCCESSES: 14, FAILURES: 14, EXCEPTIONS: 0)
Failures: 14 (HIGH: 1)
k.yaml (kubernetes)
───────────────────
+---------------------------+------------+-------------------------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+-------------------------------------+----------+------------------------------------------+
| Custom Kubernetes Check | ID001 | Deployment not allowed | LOW | Found deployment 'test' but deployments |
| | | | | are not allowed |
+---------------------------+------------+-------------------------------------+----------+------------------------------------------+
Tests: 32 (SUCCESSES: 31, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (UNKNOWN: 0, LOW: 1, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
LOW: Found deployment 'my-deployment' but deployments are not allowed
════════════════════════════════════════════════════════════════════════
Deployments are not allowed because of some reasons.
────────────────────────────────────────────────────────────────────────
k.yaml:1-2
────────────────────────────────────────────────────────────────────────
1 ┌ apiVersion: v1
2 └ kind: Deployment
────────────────────────────────────────────────────────────────────────
```
### Input
You can specify input format via `__rego_input__`.
All fields under `__rego_input` are optional.
You can specify input format via the `custom.input` annotation.
!!!example
``` rego
__rego_input__ := {
"combine": false,
"selector": [
{"type": "kubernetes"},
],
}
# METADATA
# custom:
# input:
# combine: false
# selector:
# - type: kubernetes
```
`combine` (boolean)
: The details is [here](combine.md).
: The details are [here](combine.md).
`selector` (array)
: This option filters the input by file formats or configuration languages.
: This option filters the input by file format or configuration language.
In the above example, Trivy passes only Kubernetes files to this policy.
Even if Dockerfile exists in the specified directory, it will not be passed to the policy as input.
Even if a Dockerfile exists in the specified directory, it will not be passed to the policy as input.
When configuration language such as Kubernetes is not identified, file format such as JSON will be used as `type`.
When configuration language is identified, it will overwrite `type`.
Possible values for input types are:
- `dockerfile` (Dockerfile)
- `kubernetes` (Kubernetes YAML/JSON)
- `rbac` (Kubernetes RBAC YAML/JSON)
- `cloud` (Cloud format, as defined by defsec - this is used for Terraform, CloudFormation, and Cloud/AWS scanning)
- `yaml` (Generic YAML)
- `json` (Generic JSON)
- `toml` (Generic TOML)
When configuration languages such as Kubernetes are not identified, file formats such as JSON will be used as `type`.
When a configuration language is identified, it will overwrite `type`.
!!! example
`pod.yaml` including Kubernetes Pod will be handled as `kubernetes`, not `yaml`.
`type` is overwritten by `kubernetes` from `yaml`.
`type` accepts `kubernetes`, `dockerfile`, `ansible`, `cloudformation`, `json`, `yaml`, `toml`, or `hcl`.
`type` accepts `kubernetes`, `dockerfile`, `cloudformation`, `terraform`, `terraformplan`, `json`, or `yaml`.
### Schemas
You can explore the format of input documents by browsing the schema for the relevant input type:
- [Cloud](https://github.com/aquasecurity/defsec/blob/master/pkg/rego/schemas/cloud.json)
- [Dockerfile](https://github.com/aquasecurity/defsec/blob/master/pkg/rego/schemas/dockerfile.json)
- [Kubernetes](https://github.com/aquasecurity/defsec/blob/master/pkg/rego/schemas/kubernetes.json)
- [RBAC](https://github.com/aquasecurity/defsec/blob/master/pkg/rego/schemas/rbac.json)
[rego]: https://www.openpolicyagent.org/docs/latest/policy-language/
[package]: https://www.openpolicyagent.org/docs/latest/policy-language/#packages
[source-types]: https://github.com/aquasecurity/defsec/blob/418759b4dc97af25f30f32e0bd365be7984003a1/pkg/types/sources.go)

View File

@@ -22,7 +22,7 @@ For more details, see [Policy Testing][opa-testing].
}
```
To write tests for custom policies, you can refer to existing tests under [AppShield][appshield].
To write tests for custom policies, you can refer to existing tests under [defsec][defsec].
## Go testing
[Fanal][fanal] which is a core library of Trivy can be imported as a Go library.
@@ -85,6 +85,6 @@ The following example stores allowed and denied configuration files in a directo
`Dockerfile.allowed` has one successful result in `Successes`, while `Dockerfile.denied` has one failure result in `Failures`.
[opa-testing]: https://www.openpolicyagent.org/docs/latest/policy-testing/
[appshield]: https://github.com/aquasecurity/appshield
[defsec]: https://github.com/aquasecurity/defsec
[table]: https://github.com/golang/go/wiki/TableDrivenTests
[fanal]: https://github.com/aquasecurity/fanal

View File

@@ -1,56 +0,0 @@
# Filesystem
## Quick start
Trivy scans a filesystem such as a virtual machine to detect misconfigurations.
You have to specify `--security-checks config` to enable misconfiguration detection.
```bash
$ trivy fs --security-checks config /path/to/dir
```
Internally, it is the same as [config subcommand](iac.md).
## Vulnerability and Misconfiguration scanning
The difference between `fs` and `config` subcommand is that `fs` can detect both vulnerabilities and misconfiguration at the same time.
You have to specify `--security-checks vuln,config` to enable vulnerability and misconfiguration detection.
``` bash
$ ls myapp/
Dockerfile Pipfile.lock
$ trivy fs --security-checks vuln,config --severity HIGH,CRITICAL myapp/
2021-07-09T12:03:27.564+0300 INFO Detected OS: unknown
2021-07-09T12:03:27.564+0300 INFO Number of language-specific files: 1
2021-07-09T12:03:27.564+0300 INFO Detecting pipenv vulnerabilities...
2021-07-09T12:03:27.566+0300 INFO Detected config files: 1
Pipfile.lock (pipenv)
=====================
Total: 1 (HIGH: 1, CRITICAL: 0)
+----------+------------------+----------+-------------------+---------------+---------------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+----------+------------------+----------+-------------------+---------------+---------------------------------------+
| httplib2 | CVE-2021-21240 | HIGH | 0.12.1 | 0.19.0 | python-httplib2: Regular |
| | | | | | expression denial of |
| | | | | | service via malicious header |
| | | | | | -->avd.aquasec.com/nvd/cve-2021-21240 |
+----------+------------------+----------+-------------------+---------------+---------------------------------------+
Dockerfile (dockerfile)
=======================
Tests: 23 (SUCCESSES: 22, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (HIGH: 1, CRITICAL: 0)
+---------------------------+------------+----------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+----------------------+----------+------------------------------------------+
| Dockerfile Security Check | DS002 | Image user is 'root' | HIGH | Last USER command in |
| | | | | Dockerfile should not be 'root' |
| | | | | -->avd.aquasec.com/appshield/ds002 |
+---------------------------+------------+----------------------+----------+------------------------------------------+
```
In the above example, Trivy detected vulnerabilities of Python dependencies and misconfigurations in Dockerfile.

View File

@@ -1,163 +0,0 @@
# Infrastructure as Code (IaC)
## Quick start
Simply specify a directory containing IaC files such as Terraform, CloudFormation and Dockerfile.
``` bash
$ trivy config [YOUR_IaC_DIRECTORY]
```
Trivy will automatically fetch the managed policies and will keep them up-to-date in future scans.
!!! example
```
$ ls build/
Dockerfile
$ trivy config ./build
2021-07-09T10:06:29.188+0300 INFO Need to update the built-in policies
2021-07-09T10:06:29.188+0300 INFO Downloading the built-in policies...
2021-07-09T10:06:30.520+0300 INFO Detected config files: 1
Dockerfile (dockerfile)
=======================
Tests: 23 (SUCCESSES: 22, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 1, CRITICAL: 0)
+---------------------------+------------+----------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+----------------------+----------+------------------------------------------+
| Dockerfile Security Check | DS002 | Image user is 'root' | HIGH | Last USER command in |
| | | | | Dockerfile should not be 'root' |
| | | | | -->avd.aquasec.com/appshield/ds002 |
+---------------------------+------------+----------------------+----------+------------------------------------------+
```
## Type detection
The specified directory can contain mixed types of IaC files.
Trivy automatically detects config types and applies relevant policies.
For example, the following example holds IaC files for Terraform, CloudFormation, Kubernetes, and Dockerfile in the same directory.
``` bash
$ ls iac/
Dockerfile deployment.yaml main.tf
$ trivy conf --severity HIGH,CRITICAL ./iac
```
<details>
<summary>Result</summary>
```
2021-07-09T11:51:08.212+0300 INFO Need to update the built-in policies
2021-07-09T11:51:08.212+0300 INFO Downloading the built-in policies...
2021-07-09T11:51:09.527+0300 INFO Detected config files: 3
Dockerfile (dockerfile)
=======================
Tests: 23 (SUCCESSES: 22, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (HIGH: 1, CRITICAL: 0)
+---------------------------+------------+----------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+----------------------+----------+------------------------------------------+
| Dockerfile Security Check | DS002 | Image user is 'root' | HIGH | Last USER command in |
| | | | | Dockerfile should not be 'root' |
| | | | | -->avd.aquasec.com/appshield/ds002 |
+---------------------------+------------+----------------------+----------+------------------------------------------+
deployment.yaml (kubernetes)
============================
Tests: 28 (SUCCESSES: 15, FAILURES: 13, EXCEPTIONS: 0)
Failures: 13 (HIGH: 1, CRITICAL: 0)
+---------------------------+------------+----------------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+----------------------------+----------+------------------------------------------+
| Kubernetes Security Check | KSV005 | SYS_ADMIN capability added | HIGH | Container 'hello-kubernetes' of |
| | | | | Deployment 'hello-kubernetes' |
| | | | | should not include 'SYS_ADMIN' in |
| | | | | 'securityContext.capabilities.add' |
| | | | | -->avd.aquasec.com/appshield/ksv005 |
+---------------------------+------------+----------------------------+----------+------------------------------------------+
main.tf (terraform)
===================
Tests: 23 (SUCCESSES: 14, FAILURES: 9, EXCEPTIONS: 0)
Failures: 9 (HIGH: 6, CRITICAL: 1)
+------------------------------------------+------------+------------------------------------------+----------+--------------------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+------------------------------------------+------------+------------------------------------------+----------+--------------------------------------------------------+
| Terraform Security Check powered by | AWS003 | AWS Classic resource usage. | HIGH | Resource |
| tfsec | | | | 'aws_db_security_group.my-group' |
| | | | | uses EC2 Classic. Use a VPC instead. |
| | | | | -->tfsec.dev/docs/aws/AWS003/ |
+ +------------+------------------------------------------+----------+--------------------------------------------------------+
| | AWS004 | Use of plain HTTP. | CRITICAL | Resource |
| | | | | 'aws_alb_listener.my-alb-listener' |
| | | | | uses plain HTTP instead of HTTPS. |
| | | | | -->tfsec.dev/docs/aws/AWS004/ |
+ +------------+------------------------------------------+----------+--------------------------------------------------------+
| | AWS018 | Missing description for security | HIGH | Resource |
| | | group/security group rule. | | 'aws_security_group_rule.my-rule' should |
| | | | | include a description for auditing |
| | | | | purposes. -->tfsec.dev/docs/aws/AWS018/ |
+ +------------+------------------------------------------+ +--------------------------------------------------------+
| | AWS025 | API Gateway domain name uses outdated | | Resource |
| | | SSL/TLS protocols. | | 'aws_api_gateway_domain_name.empty_security_policy' |
| | | | | defines outdated SSL/TLS policies (not using |
| | | | | TLS_1_2). -->tfsec.dev/docs/aws/AWS025/ |
+ + + + +--------------------------------------------------------+
| | | | | Resource |
| | | | | 'aws_api_gateway_domain_name.missing_security_policy' |
| | | | | should include security_policy (defaults to outdated |
| | | | | SSL/TLS policy). -->tfsec.dev/docs/aws/AWS025/ |
+ + + + +--------------------------------------------------------+
| | | | | Resource |
| | | | | 'aws_api_gateway_domain_name.outdated_security_policy' |
| | | | | defines outdated SSL/TLS policies (not using TLS_1_2). |
| | | | | -->tfsec.dev/docs/aws/AWS025/ |
+ +------------+------------------------------------------+ +--------------------------------------------------------+
| | AZU003 | Unencrypted managed disk. | | Resource 'azurerm_managed_disk.source' |
| | | | | defines an unencrypted managed disk. |
| | | | | -->tfsec.dev/docs/azure/AZU003/ |
+------------------------------------------+------------+------------------------------------------+----------+--------------------------------------------------------+
```
</details>
You can see the config type next to each file name.
!!! example
``` bash
Dockerfile (dockerfile)
=======================
Tests: 23 (SUCCESSES: 22, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (HIGH: 1, CRITICAL: 0)
...
deployment.yaml (kubernetes)
============================
Tests: 28 (SUCCESSES: 15, FAILURES: 13, EXCEPTIONS: 0)
Failures: 13 (HIGH: 1, CRITICAL: 0)
...
main.tf (terraform)
===================
Tests: 23 (SUCCESSES: 14, FAILURES: 9, EXCEPTIONS: 0)
Failures: 9 (HIGH: 6, CRITICAL: 1)
...
bucket.yaml (cloudformation)
============================
Tests: 9 (SUCCESSES: 3, FAILURES: 6, EXCEPTIONS: 0)
Failures: 6 (UNKNOWN: 0, LOW: 0, MEDIUM: 2, HIGH: 4, CRITICAL: 0)
```
## Example
See [here](https://github.com/aquasecurity/trivy/tree/125c457517f05b6498bc68eaeec6e683dd36c49a/examples/misconf/mixed)

View File

@@ -1,8 +0,0 @@
# Misconfiguration Scanning
Trivy provides built-in policies to detect configuration issues in Docker, Kubernetes and Terraform.
Also, you can write your own policies in [Rego][rego] to scan JSON, YAML, HCL, etc, like [Conftest][conftest].
![misconf](../../imgs/misconf.png)
[rego]: https://www.openpolicyagent.org/docs/latest/policy-language/
[conftest]: https://github.com/open-policy-agent/conftest/

View File

@@ -11,202 +11,50 @@ trivy conf --severity HIGH,CRITICAL examples/misconf/mixed
<details>
<summary>Result</summary>
```bash
2021-07-10T17:37:13.267+0300 INFO Detected config files: 4
```shell
2022-05-16T13:50:42.718+0100 INFO Detected config files: 3
configs/Dockerfile (dockerfile)
===============================
Tests: 23 (SUCCESSES: 21, FAILURES: 2, EXCEPTIONS: 0)
Failures: 2 (HIGH: 1, CRITICAL: 0)
Dockerfile (dockerfile)
=======================
Tests: 17 (SUCCESSES: 16, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (HIGH: 1, CRITICAL: 0)
+---------------------------+------------+----------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+----------------------+----------+------------------------------------------+
| Dockerfile Security Check | DS002 | Image user is 'root' | HIGH | Specify at least 1 USER |
| | | | | command in Dockerfile with |
| | | | | non-root user as argument |
| | | | | -->avd.aquasec.com/appshield/ds002 |
+---------------------------+------------+----------------------+----------+------------------------------------------+
HIGH: Last USER command in Dockerfile should not be 'root'
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Running containers with 'root' user can lead to a container escape situation. It is a best practice to run containers as non-root users, which can be done by adding a 'USER' statement to the Dockerfile.
configs/deployment.yaml (kubernetes)
====================================
Tests: 28 (SUCCESSES: 14, FAILURES: 14, EXCEPTIONS: 0)
Failures: 14 (HIGH: 1, CRITICAL: 0)
See https://avd.aquasec.com/misconfig/ds002
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Dockerfile:3
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
3 [ USER root
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
+---------------------------+------------+-------------------------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+-------------------------------------+----------+------------------------------------------+
| Kubernetes Security Check | KSV006 | docker.sock is mounted to container | HIGH | Deployment 'hello-kubernetes' should |
| | | | | not specify '/var/run/docker.socker' in |
| | | | | 'spec.template.volumes.hostPath.path' |
| | | | | -->avd.aquasec.com/appshield/ksv006 |
+---------------------------+------------+-------------------------------------+----------+------------------------------------------+
configs/main.tf (terraform)
===========================
Tests: 19 (SUCCESSES: 11, FAILURES: 8, EXCEPTIONS: 0)
Failures: 8 (HIGH: 6, CRITICAL: 1)
+------------------------------------------+------------+------------------------------------------+----------+--------------------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+------------------------------------------+------------+------------------------------------------+----------+--------------------------------------------------------+
| Terraform Security Check powered by | AWS003 | AWS Classic resource usage. | HIGH | Resource |
| tfsec | | | | 'aws_db_security_group.my-group' |
| | | | | uses EC2 Classic. Use a VPC instead. |
| | | | | -->tfsec.dev/docs/aws/AWS003/ |
+ +------------+------------------------------------------+----------+--------------------------------------------------------+
| | AWS004 | Use of plain HTTP. | CRITICAL | Resource |
| | | | | 'aws_alb_listener.my-alb-listener' |
| | | | | uses plain HTTP instead of HTTPS. |
| | | | | -->tfsec.dev/docs/aws/AWS004/ |
+ +------------+------------------------------------------+----------+--------------------------------------------------------+
| | AWS018 | Missing description for security | HIGH | Resource |
| | | group/security group rule. | | 'aws_security_group_rule.my-rule' should |
| | | | | include a description for auditing |
| | | | | purposes. -->tfsec.dev/docs/aws/AWS018/ |
+ +------------+------------------------------------------+ +--------------------------------------------------------+
| | AWS025 | API Gateway domain name uses outdated | | Resource |
| | | SSL/TLS protocols. | | 'aws_api_gateway_domain_name.empty_security_policy' |
| | | | | defines outdated SSL/TLS policies (not using |
| | | | | TLS_1_2). -->tfsec.dev/docs/aws/AWS025/ |
+ + + + +--------------------------------------------------------+
| | | | | Resource |
| | | | | 'aws_api_gateway_domain_name.missing_security_policy' |
| | | | | should include security_policy (defaults to outdated |
| | | | | SSL/TLS policy). -->tfsec.dev/docs/aws/AWS025/ |
+ + + + +--------------------------------------------------------+
| | | | | Resource |
| | | | | 'aws_api_gateway_domain_name.outdated_security_policy' |
| | | | | defines outdated SSL/TLS policies (not using TLS_1_2). |
| | | | | -->tfsec.dev/docs/aws/AWS025/ |
+ +------------+------------------------------------------+ +--------------------------------------------------------+
| | AZU003 | Unencrypted managed disk. | | Resource 'azurerm_managed_disk.source' |
| | | | | defines an unencrypted managed disk. |
| | | | | -->tfsec.dev/docs/azure/AZU003/ |
+------------------------------------------+------------+------------------------------------------+----------+--------------------------------------------------------+
configs/variables.tf (terraform)
================================
Tests: 1 (SUCCESSES: 1, FAILURES: 0, EXCEPTIONS: 0)
deployment.yaml (kubernetes)
============================
Tests: 8 (SUCCESSES: 8, FAILURES: 0, EXCEPTIONS: 0)
Failures: 0 (HIGH: 0, CRITICAL: 0)
```
</details>
## By Misconfiguration IDs
main.tf (terraform)
===================
Tests: 1 (SUCCESSES: 0, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (HIGH: 0, CRITICAL: 1)
Use `.trivyignore`.
CRITICAL: Classic resources should not be used.
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
AWS Classic resources run in a shared environment with infrastructure owned by other AWS customers. You should run
resources in a VPC instead.
```bash
$ cat .trivyignore
# Accept the risk
AWS003
AWS018
AWS025
$ trivy conf --severity HIGH,CRITICAL examples/misconf/mixed
```
<details>
<summary>Result</summary>
```bash
2021-07-10T17:38:51.306+0300 INFO Detected config files: 4
configs/Dockerfile (dockerfile)
===============================
Tests: 23 (SUCCESSES: 21, FAILURES: 2, EXCEPTIONS: 0)
Failures: 2 (HIGH: 1, CRITICAL: 0)
+---------------------------+------------+----------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+----------------------+----------+------------------------------------------+
| Dockerfile Security Check | DS002 | Image user is 'root' | HIGH | Specify at least 1 USER |
| | | | | command in Dockerfile with |
| | | | | non-root user as argument |
| | | | | -->avd.aquasec.com/appshield/ds002 |
+---------------------------+------------+----------------------+----------+------------------------------------------+
configs/deployment.yaml (kubernetes)
====================================
Tests: 28 (SUCCESSES: 14, FAILURES: 14, EXCEPTIONS: 0)
Failures: 14 (HIGH: 1, CRITICAL: 0)
+---------------------------+------------+-------------------------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+---------------------------+------------+-------------------------------------+----------+------------------------------------------+
| Kubernetes Security Check | KSV006 | docker.sock is mounted to container | HIGH | Deployment 'hello-kubernetes' should |
| | | | | not specify '/var/run/docker.socker' in |
| | | | | 'spec.template.volumes.hostPath.path' |
| | | | | -->avd.aquasec.com/appshield/ksv006 |
+---------------------------+------------+-------------------------------------+----------+------------------------------------------+
configs/main.tf (terraform)
===========================
Tests: 19 (SUCCESSES: 11, FAILURES: 8, EXCEPTIONS: 0)
Failures: 8 (HIGH: 1, CRITICAL: 1)
+------------------------------------------+------------+---------------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+------------------------------------------+------------+---------------------------+----------+------------------------------------------+
| Terraform Security Check powered by | AWS004 | Use of plain HTTP. | CRITICAL | Resource |
| tfsec | | | | 'aws_alb_listener.my-alb-listener' |
| | | | | uses plain HTTP instead of HTTPS. |
| | | | | -->tfsec.dev/docs/aws/AWS004/ |
+ +------------+---------------------------+----------+------------------------------------------+
| | AZU003 | Unencrypted managed disk. | HIGH | Resource 'azurerm_managed_disk.source' |
| | | | | defines an unencrypted managed disk. |
| | | | | -->tfsec.dev/docs/azure/AZU003/ |
+------------------------------------------+------------+---------------------------+----------+------------------------------------------+
configs/variables.tf (terraform)
================================
Tests: 1 (SUCCESSES: 1, FAILURES: 0, EXCEPTIONS: 0)
Failures: 0 (HIGH: 0, CRITICAL: 0)
```
</details>
## By Exceptions
See [Exceptions](../policy/exceptions.md)
## Show Successes and Exceptions
Use `--include-non-failures` option to show successes and exceptions as well as failures.
```bash
trivy conf --severity CRITICAL --include-non-failures examples/misconf/mixed
```
<details>
<summary>Result</summary>
```
2021-07-10T17:44:02.049+0300 INFO Detected config files: 4
configs/Dockerfile (dockerfile)
===============================
Tests: 23 (SUCCESSES: 21, FAILURES: 2, EXCEPTIONS: 0)
Failures: 2 (CRITICAL: 0)
+---------------------------+------------+------------------------------------------+----------+--------+-----------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | STATUS | MESSAGE |
+---------------------------+------------+------------------------------------------+----------+--------+-----------------+
| Dockerfile Security Check | DS006 | COPY '--from' refers to the current | CRITICAL | PASS | No issues found |
| | | image | | | |
+ +------------+------------------------------------------+ + + +
| | DS007 | Multiple ENTRYPOINT instructions are | | | |
| | | listed | | | |
+ +------------+------------------------------------------+ + + +
| | DS008 | Exposed port is out of range | | | |
+ +------------+------------------------------------------+ + + +
| | DS010 | 'sudo' is used | | | |
+ +------------+------------------------------------------+ + + +
| | DS011 | COPY with more than two arguments is not | | | |
| | | ending with slash | | | |
+ +------------+------------------------------------------+ + + +
| | DS012 | Duplicate aliases are defined in | | | |
| | | different FROMs | | | |
+---------------------------+------------+------------------------------------------+----------+--------+-----------------+
...
See https://avd.aquasec.com/misconfig/avd-aws-0081
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
main.tf:2-4
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
2 ┌ resource "aws_db_security_group" "sg" {
3
4}
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
```
</details>

View File

@@ -2,21 +2,3 @@
!!! hint
See also [Others](../../vulnerability/examples/others.md) in Vulnerability section.
## File patterns
When a directory is given as an input, Trivy will recursively look for and test all files based on file patterns.
The default file patterns are [here](../custom/index.md).
In addition to the default file patterns, the `--file-patterns` option takes regexp patterns to look for your files.
For example, it may be useful when your file name of Dockerfile doesn't match the default patterns.
This can be repeated for specifying multiple file patterns.
Allowed values are here:
- dockerfile
- yaml
- json
- toml
- hcl
For more details, see [an example](https://github.com/aquasecurity/trivy/tree/{{ git.commit }}/examples/misconf/file-patterns)

View File

@@ -26,63 +26,10 @@ trivy conf --policy ./policy --data ./data --namespaces user ./configs
For more details, see [Custom Data](../custom/data.md).
## Pass namespaces
By default, Trivy evaluate policies defined in `appshield.*`.
By default, Trivy evaluates policies defined in `builtin.*`.
If you want to evaluate custom policies in other packages, you have to specify package prefixes through `--namespaces` option.
This can be repeated for specifying multiple packages.
``` bash
trivy conf --policy ./policy --namespaces main --namespaces user ./configs
```
## Skip update of built-in policies
`Trivy` downloads built-in policies when it starts operating.
Then, it checks for updates every 24 hours.
You can use the `--skip-policy-update` option to skip it.
If you skip it the first time, the built-in policies will not be loaded.
!!! note
Even if you specify the option the first time, it will be loaded as Terraform policies are written in Go.
```
trivy conf --skip-policy-update examples/misconf/mixed [~/src/github.com/aquasecurity/trivy]
```
<details>
<summary>Result</summary>
```
2021-07-10T18:04:19.083+0300 INFO No builtin policies were loaded
2021-07-10T18:04:19.174+0300 INFO Detected config files: 2
configs/main.tf (terraform)
===========================
Tests: 19 (SUCCESSES: 11, FAILURES: 8, EXCEPTIONS: 0)
Failures: 8 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 1, CRITICAL: 1)
+------------------------------------------+------------+------------------------------------------+----------+------------------------------------------+
| TYPE | MISCONF ID | CHECK | SEVERITY | MESSAGE |
+------------------------------------------+------------+------------------------------------------+----------+------------------------------------------+
| Terraform Security Check powered by | AWS004 | Use of plain HTTP. | CRITICAL | Resource |
| tfsec | | | | 'aws_alb_listener.my-alb-listener' |
| | | | | uses plain HTTP instead of HTTPS. |
| | | | | -->tfsec.dev/docs/aws/AWS004/ |
+ +------------+------------------------------------------+----------+------------------------------------------+
| | AWS006 | An ingress security group rule allows | MEDIUM | Resource |
| | | traffic from /0. | | 'aws_security_group_rule.my-rule' |
| | | | | defines a fully open |
| | | | | ingress security group rule. |
| | | | | -->tfsec.dev/docs/aws/AWS006/ |
+ +------------+------------------------------------------+----------+------------------------------------------+
| | AZU003 | Unencrypted managed disk. | HIGH | Resource 'azurerm_managed_disk.source' |
| | | | | defines an unencrypted managed disk. |
| | | | | -->tfsec.dev/docs/azure/AZU003/ |
+------------------------------------------+------------+------------------------------------------+----------+------------------------------------------+
configs/variables.tf (terraform)
================================
Tests: 1 (SUCCESSES: 1, FAILURES: 0, EXCEPTIONS: 0)
Failures: 0 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 0)
```
</details>

View File

@@ -0,0 +1,48 @@
# Value Overrides
Value files can be passed for supported scannable config files.
## Terraform value overrides
You can pass `tf-vars` files to Trivy to override default values found in the Terraform HCL code.
```bash
trivy conf --tf-vars dev.terraform.tfvars ./infrastructure/tf
```
## Helm value overrides
There are a number of options for overriding values in Helm charts. When override values are passed to the Helm scanner, the values will be used during the Manifest rendering process and will become part of the scanned artifact.
### Setting inline value overrides
Overrides can be set inline on the command line
```bash
trivy conf --helm-set securityContext.runAsUser=0 ./charts/mySql
```
### Setting value file overrides
Overrides can be in a file that has the key=value set.
```yaml
# Example override file (overrides.yaml)
securityContext:
runAsUser: 0
```
```bash
trivy conf --helm-values overrides.yaml ./charts/mySql
```
### Setting value as explicit string
the `--helm-set-string` is the same as `--helm-set` but explicitly retains the value as a string
```bash
trivy config --helm-set-string name=false ./infrastructure/tf
```
### Setting specific values from files
Specific override values can come from specific files
```bash
trivy conf --helm-set-file environment=dev.values.yaml ./charts/mySql
```

View File

@@ -2,40 +2,27 @@
## Policy Sources
Built-in policies are mainly written in [Rego][rego].
Those policies are managed under [AppShield repository][appshield].
Terraform policies are currently powered by [tfsec][tfsec] and CloudFormation policies are powered by [cfsec][cfsec].
Built-in policies are mainly written in [Rego][rego] and Go.
Those policies are managed under [defsec repository][defsec].
| Config type | Source |
| ---------------| ----------------------------- |
| Kubernetes | [AppShield][kubernetes] |
| Dockerfile | [AppShield][docker] |
| Terraform | [tfsec][tfsec-checks] |
| CloudFormation | [cfsec][cfsec-checks] |
| Config type | Source |
|---------------------------|----------------------|
| Kubernetes | [defsec][kubernetes] |
| Dockerfile, Containerfile | [defsec][docker] |
| Terraform | [defsec][defsec] |
| CloudFormation | [defsec][defsec] |
| Azure ARM Template | [defsec][defsec] |
| Helm Chart | [defsec][kubernetes] |
| RBAC | [defsec][rbac] |
For suggestions or issues regarding policy content, please open an issue under [AppShield][appshield], [tfsec][tfsec] or [cfsec][cfsec] repository.
For suggestions or issues regarding policy content, please open an issue under the [defsec][defsec] repository.
Ansible are coming soon.
Helm Chart scanning will resolve the chart to Kubernetes manifests then run the [kubernetes][kubernetes] checks.
## Policy Distribution
AppShield policies are distributed as an OPA bundle on [GitHub Container Registry][ghcr] (GHCR).
When misconfiguration detection is enabled, Trivy pulls the OPA bundle from GHCR as an OCI artifact and stores it in the cache.
Those policies are then loaded into Trivy OPA engine and used for detecting misconfigurations.
## Update Interval
Trivy checks for updates to OPA bundle on GHCR every 24 hours and pulls it if there are any updates.
Ansible scanning is coming soon.
[rego]: https://www.openpolicyagent.org/docs/latest/policy-language/
[appshield]: https://github.com/aquasecurity/appshield
[kubernetes]: https://github.com/aquasecurity/appshield/tree/master/kubernetes
[docker]: https://github.com/aquasecurity/appshield/tree/master/docker
[tfsec-checks]: https://tfsec.dev/
[tfsec]: https://github.com/aquasecurity/tfsec
[cfsec-checks]: https://cfsec.dev/
[cfsec]: https://github.com/aquasecurity/cfsec
[ghcr]: https://github.com/aquasecurity/appshield/pkgs/container/appshield
[dockerfile-bestpractice]: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
[pss]: https://kubernetes.io/docs/concepts/security/pod-security-standards/
[azure]: https://docs.microsoft.com/en-us/azure/security/fundamentals/network-best-practices
[kics]: https://github.com/Checkmarx/kics/
[defsec]: https://github.com/aquasecurity/defsec
[kubernetes]: https://github.com/aquasecurity/defsec/tree/master/internal/rules/kubernetes
[kubernetes]: https://github.com/aquasecurity/defsec/tree/master/internal/rules/rbac
[docker]: https://github.com/aquasecurity/defsec/tree/master/internal/rules/docker

View File

@@ -1,5 +1,5 @@
# Exceptions
Exceptions lets you to specify cases where you allow policy violations.
Exceptions let you specify cases where you allow policy violations.
Trivy supports two types of exceptions.
!!! info
@@ -22,7 +22,7 @@ The `exception` rule must be defined under `namespace.exceptions`.
exception[ns] {
ns := data.namespaces[_]
startswith(ns, "appshield")
startswith(ns, "builtin.kubernetes")
}
```
@@ -79,7 +79,7 @@ If you want to apply rule-based exceptions to built-in policies, you have to def
!!! example
``` rego
package appshield.kubernetes.KSV012
package builtin.kubernetes.KSV012
exception[rules] {
input.metadata.name == "can-run-as-root"
@@ -87,12 +87,12 @@ If you want to apply rule-based exceptions to built-in policies, you have to def
}
```
This exception is applied to [KSV012][ksv012] in AppShield.
You can get the package names in [AppShield repository][appshield] or the JSON output from Trivy.
This exception is applied to [KSV012][ksv012] in defsec.
You can get the package names in the [defsec repository][defsec] or the JSON output from Trivy.
For more details, see [an example][rule-example].
[ns-example]: https://github.com/aquasecurity/trivy/tree/{{ git.commit }}/examples/misconf/namespace-exception
[rule-example]: https://github.com/aquasecurity/trivy/tree/{{ git.commit }}/examples/misconf/rule-exception
[ksv012]: https://github.com/aquasecurity/appshield/blob/57bccc1897b2500a731415bda3990b0d4fbc959e/kubernetes/policies/pss/restricted/3_runs_as_root.rego
[appshield]: https://github.com/aquasecurity/appshield/
[ksv012]: https://github.com/aquasecurity/defsec/blob/master/internal/rules/kubernetes/policies/pss/restricted/3_runs_as_root.rego
[defsec]: https://github.com/aquasecurity/defsec/

View File

@@ -0,0 +1,321 @@
# Misconfiguration Scanning
Trivy provides built-in policies to detect configuration issues in Docker, Kubernetes, Terraform and CloudFormation.
Also, you can write your own policies in [Rego][rego] to scan JSON, YAML, etc, like [Conftest][conftest].
![misconf](../../imgs/misconf.png)
## Quick start
Simply specify a directory containing IaC files such as Terraform, CloudFormation, Azure ARM templates, Helm Charts and Dockerfile.
``` bash
$ trivy config [YOUR_IaC_DIRECTORY]
```
!!! example
```
$ ls build/
Dockerfile
$ trivy config ./build
2022-05-16T13:29:29.952+0100 INFO Detected config files: 1
Dockerfile (dockerfile)
=======================
Tests: 23 (SUCCESSES: 22, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 1, HIGH: 0, CRITICAL: 0)
MEDIUM: Specify a tag in the 'FROM' statement for image 'alpine'
══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
When using a 'FROM' statement you should use a specific tag to avoid uncontrolled behavior when the image is updated.
See https://avd.aquasec.com/misconfig/ds001
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Dockerfile:1
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
1 [ FROM alpine:latest
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
```
You can also enable misconfiguration detection in container image, filesystem and git repository scanning via `--security-checks config`.
```bash
$ trivy image --security-checks config IMAGE_NAME
```
```bash
$ trivy fs --security-checks config /path/to/dir
```
!!! note
Misconfiguration detection is not enabled by default in `image`, `fs` and `repo` subcommands.
Unlike the `config` subcommand, `image`, `fs` and `repo` subcommands can also scan for vulnerabilities and secrets at the same time.
You can specify `--security-checks vuln,config,secret` to enable vulnerability and secret detection as well as misconfiguration detection.
!!! example
``` bash
$ ls myapp/
Dockerfile Pipfile.lock
$ trivy fs --security-checks vuln,config,secret --severity HIGH,CRITICAL myapp/
2022-05-16T13:42:21.440+0100 INFO Number of language-specific files: 1
2022-05-16T13:42:21.440+0100 INFO Detecting pipenv vulnerabilities...
2022-05-16T13:42:21.440+0100 INFO Detected config files: 1
Pipfile.lock (pipenv)
=====================
Total: 1 (HIGH: 1, CRITICAL: 0)
┌──────────┬────────────────┬──────────┬───────────────────┬───────────────┬───────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├──────────┼────────────────┼──────────┼───────────────────┼───────────────┼───────────────────────────────────────────────────────────┤
│ httplib2 │ CVE-2021-21240 │ HIGH │ 0.12.1 │ 0.19.0 │ python-httplib2: Regular expression denial of service via │
│ │ │ │ │ │ malicious header │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-21240 │
└──────────┴────────────────┴──────────┴───────────────────┴───────────────┴───────────────────────────────────────────────────────────┘
Dockerfile (dockerfile)
=======================
Tests: 17 (SUCCESSES: 16, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (HIGH: 1, CRITICAL: 0)
HIGH: Last USER command in Dockerfile should not be 'root'
════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Running containers with 'root' user can lead to a container escape situation. It is a best practice to run containers as non-root users, which can be done by adding a 'USER' statement to the Dockerfile.
See https://avd.aquasec.com/misconfig/ds002
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
Dockerfile:3
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
3 [ USER root
────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
```
In the above example, Trivy detected vulnerabilities of Python dependencies and misconfigurations in Dockerfile.
## Type detection
The specified directory can contain mixed types of IaC files.
Trivy automatically detects config types and applies relevant policies.
For example, the following example holds IaC files for Terraform, CloudFormation, Kubernetes, Helm Charts, and Dockerfile in the same directory.
``` bash
$ ls iac/
Dockerfile deployment.yaml main.tf mysql-8.8.26.tar
$ trivy conf --severity HIGH,CRITICAL ./iac
```
<details>
<summary>Result</summary>
```
2022-06-06T11:01:21.142+0100 INFO Detected config files: 8
Dockerfile (dockerfile)
Tests: 21 (SUCCESSES: 20, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (MEDIUM: 0, HIGH: 1, CRITICAL: 0)
HIGH: Specify at least 1 USER command in Dockerfile with non-root user as argument
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Running containers with 'root' user can lead to a container escape situation. It is a best practice to run containers as non-root users, which can be done by adding a 'USER' statement to the Dockerfile.
See https://avd.aquasec.com/misconfig/ds002
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
deployment.yaml (kubernetes)
Tests: 20 (SUCCESSES: 15, FAILURES: 5, EXCEPTIONS: 0)
Failures: 5 (MEDIUM: 4, HIGH: 1, CRITICAL: 0)
MEDIUM: Container 'hello-kubernetes' of Deployment 'hello-kubernetes' should set 'securityContext.allowPrivilegeEscalation' to false
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
A program inside the container can elevate its own privileges and run as root, which might give the program control over the container and node.
See https://avd.aquasec.com/misconfig/ksv001
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
deployment.yaml:16-19
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
16 ┌ - name: hello-kubernetes
17 │ image: hello-kubernetes:1.5
18 │ ports:
19 └ - containerPort: 8080
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
HIGH: Deployment 'hello-kubernetes' should not specify '/var/run/docker.socker' in 'spec.template.volumes.hostPath.path'
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Mounting docker.sock from the host can give the container full root access to the host.
See https://avd.aquasec.com/misconfig/ksv006
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
deployment.yaml:6-29
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
6 ┌ replicas: 3
7 │ selector:
8 │ matchLabels:
9 │ app: hello-kubernetes
10 │ template:
11 │ metadata:
12 │ labels:
13 │ app: hello-kubernetes
14 └ spec:
..
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
MEDIUM: Container 'hello-kubernetes' of Deployment 'hello-kubernetes' should set 'securityContext.runAsNonRoot' to true
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
'runAsNonRoot' forces the running image to run as a non-root user to ensure least privileges.
See https://avd.aquasec.com/misconfig/ksv012
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
deployment.yaml:16-19
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
16 ┌ - name: hello-kubernetes
17 │ image: hello-kubernetes:1.5
18 │ ports:
19 └ - containerPort: 8080
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
MEDIUM: Deployment 'hello-kubernetes' should not set 'spec.template.volumes.hostPath'
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
HostPath volumes must be forbidden.
See https://avd.aquasec.com/misconfig/ksv023
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
deployment.yaml:6-29
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
6 ┌ replicas: 3
7 │ selector:
8 │ matchLabels:
9 │ app: hello-kubernetes
10 │ template:
11 │ metadata:
12 │ labels:
13 │ app: hello-kubernetes
14 └ spec:
..
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
MEDIUM: Deployment 'hello-kubernetes' should set 'securityContext.sysctl' to the allowed values
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
Sysctls can disable security mechanisms or affect all containers on a host, and should be disallowed except for an allowed 'safe' subset. A sysctl is considered safe if it is namespaced in the container or the Pod, and it is isolated from other Pods or processes on the same Node.
See https://avd.aquasec.com/misconfig/ksv026
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
deployment.yaml:6-29
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
6 ┌ replicas: 3
7 │ selector:
8 │ matchLabels:
9 │ app: hello-kubernetes
10 │ template:
11 │ metadata:
12 │ labels:
13 │ app: hello-kubernetes
14 └ spec:
..
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
mysql-8.8.26.tar:templates/primary/statefulset.yaml (helm)
Tests: 20 (SUCCESSES: 18, FAILURES: 2, EXCEPTIONS: 0)
Failures: 2 (MEDIUM: 2, HIGH: 0, CRITICAL: 0)
MEDIUM: Container 'mysql' of StatefulSet 'mysql' should set 'securityContext.allowPrivilegeEscalation' to false
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
A program inside the container can elevate its own privileges and run as root, which might give the program control over the container and node.
See https://avd.aquasec.com/misconfig/ksv001
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
mysql-8.8.26.tar:templates/primary/statefulset.yaml:56-130
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
56 ┌ - name: mysql
57 │ image: docker.io/bitnami/mysql:8.0.28-debian-10-r23
58 │ imagePullPolicy: "IfNotPresent"
59 │ securityContext:
60 │ runAsUser: 1001
61 │ env:
62 │ - name: BITNAMI_DEBUG
63 │ value: "false"
64 └ - name: MYSQL_ROOT_PASSWORD
..
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
MEDIUM: Container 'mysql' of StatefulSet 'mysql' should set 'securityContext.runAsNonRoot' to true
═══════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════
'runAsNonRoot' forces the running image to run as a non-root user to ensure least privileges.
See https://avd.aquasec.com/misconfig/ksv012
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
mysql-8.8.26.tar:templates/primary/statefulset.yaml:56-130
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
56 ┌ - name: mysql
57 │ image: docker.io/bitnami/mysql:8.0.28-debian-10-r23
58 │ imagePullPolicy: "IfNotPresent"
59 │ securityContext:
60 │ runAsUser: 1001
61 │ env:
62 │ - name: BITNAMI_DEBUG
63 │ value: "false"
64 └ - name: MYSQL_ROOT_PASSWORD
..
───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────
```
</details>
You can see the config type next to each file name.
!!! example
``` bash
Dockerfile (dockerfile)
=======================
Tests: 23 (SUCCESSES: 22, FAILURES: 1, EXCEPTIONS: 0)
Failures: 1 (HIGH: 1, CRITICAL: 0)
...
deployment.yaml (kubernetes)
============================
Tests: 28 (SUCCESSES: 15, FAILURES: 13, EXCEPTIONS: 0)
Failures: 13 (MEDIUM: 4, HIGH: 1, CRITICAL: 0)
...
main.tf (terraform)
===================
Tests: 23 (SUCCESSES: 14, FAILURES: 9, EXCEPTIONS: 0)
Failures: 9 (HIGH: 6, CRITICAL: 1)
...
bucket.yaml (cloudformation)
============================
Tests: 9 (SUCCESSES: 3, FAILURES: 6, EXCEPTIONS: 0)
Failures: 6 (UNKNOWN: 0, LOW: 0, MEDIUM: 2, HIGH: 4, CRITICAL: 0)
...
mysql-8.8.26.tar:templates/primary/statefulset.yaml (helm)
==========================================================
Tests: 20 (SUCCESSES: 18, FAILURES: 2, EXCEPTIONS: 0)
Failures: 2 (MEDIUM: 2, HIGH: 0, CRITICAL: 0)
```
## Examples
See [here](https://github.com/aquasecurity/trivy/tree/{{ git.tag }}/examples/misconf/mixed)
[rego]: https://www.openpolicyagent.org/docs/latest/policy-language/
[conftest]: https://github.com/open-policy-agent/conftest/

View File

@@ -1,31 +1,70 @@
# Client
```bash
NAME:
trivy client - client mode
Usage:
trivy client [flags] IMAGE_NAME
USAGE:
trivy client [command options] image_name
Aliases:
client, c
OPTIONS:
--template value, -t value output template [$TRIVY_TEMPLATE]
--format value, -f value format (table, json, sarif, template) (default: "table") [$TRIVY_FORMAT]
--input value, -i value input file path instead of image name [$TRIVY_INPUT]
--severity value, -s value severities of vulnerabilities to be displayed (comma separated) (default: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL") [$TRIVY_SEVERITY]
--output value, -o value output file name [$TRIVY_OUTPUT]
--exit-code value Exit code when vulnerabilities were found (default: 0) [$TRIVY_EXIT_CODE]
--clear-cache, -c clear image caches without scanning (default: false) [$TRIVY_CLEAR_CACHE]
--ignore-unfixed display only fixed vulnerabilities (default: false) [$TRIVY_IGNORE_UNFIXED]
--removed-pkgs detect vulnerabilities of removed packages (only for Alpine) (default: false) [$TRIVY_REMOVED_PKGS]
--vuln-type value comma-separated list of vulnerability types (os,library) (default: "os,library") [$TRIVY_VULN_TYPE]
--ignorefile value specify .trivyignore file (default: ".trivyignore") [$TRIVY_IGNOREFILE]
--timeout value timeout (default: 5m0s) [$TRIVY_TIMEOUT]
--ignore-policy value specify the Rego file to evaluate each vulnerability [$TRIVY_IGNORE_POLICY]
--list-all-pkgs enabling the option will output all packages regardless of vulnerability (default: false) [$TRIVY_LIST_ALL_PKGS]
--offline-scan do not issue API requests to identify dependencies (default: false) [$TRIVY_OFFLINE_SCAN]
--token value for authentication [$TRIVY_TOKEN]
--token-header value specify a header name for token (default: "Trivy-Token") [$TRIVY_TOKEN_HEADER]
--remote value server address (default: "http://localhost:4954") [$TRIVY_REMOTE]
--custom-headers value custom headers [$TRIVY_CUSTOM_HEADERS]
--help, -h show help (default: false)
Scan Flags
--offline-scan do not issue API requests to identify dependencies
--security-checks string comma-separated list of what security issues to detect (vuln,config,secret) (default "vuln,secret")
--skip-dirs strings specify the directories where the traversal is skipped
--skip-files strings specify the file paths to skip traversal
Report Flags
--dependency-tree show dependency origin tree (EXPERIMENTAL)
--exit-code int specify exit code when any security issues are found
-f, --format string format (table, json, sarif, template, cyclonedx, spdx, spdx-json, github, cosign-vuln) (default "table")
--ignore-policy string specify the Rego file path to evaluate each vulnerability
--ignorefile string specify .trivyignore file (default ".trivyignore")
--list-all-pkgs enabling the option will output all packages regardless of vulnerability
-o, --output string output file name
--report string specify a report format for the output. (all,summary) (default "all")
-s, --severity string severities of security issues to be displayed (comma separated) (default "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL")
-t, --template string output template
Cache Flags
--cache-backend string cache backend (e.g. redis://localhost:6379) (default "fs")
--cache-ttl duration cache TTL when using redis as cache backend
--clear-cache clear image caches without scanning
--redis-ca string redis ca file location, if using redis as cache backend
--redis-cert string redis certificate file location, if using redis as cache backend
--redis-key string redis key file location, if using redis as cache backend
DB Flags
--db-repository string OCI repository to retrieve trivy-db from (default "ghcr.io/aquasecurity/trivy-db")
--download-db-only download/update vulnerability database but don't run a scan
--no-progress suppress progress bar
--reset remove all caches and database
--skip-db-update skip updating vulnerability database
Vulnerability Flags
--ignore-unfixed display only fixed vulnerabilities
--vuln-type string comma-separated list of vulnerability types (os,library) (default "os,library")
Misconfiguration Flags
--config-data strings specify paths from which data for the Rego policies will be recursively loaded
--config-policy strings specify paths to the Rego policy files directory, applying config files
--file-patterns strings specify config file patterns, available with '--security-checks config'
--include-non-failures include successes and exceptions, available with '--security-checks config'
--policy-namespaces strings Rego namespaces
--trace enable more verbose trace output for custom queries
Client/Server Flags
--custom-headers strings custom headers in client mode
--remote string server address (default "http://localhost:4954")
--token string for authentication in client/server mode
--token-header string specify a header name for token in client/server mode (default "Trivy-Token")
Global Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
--generate-default-config write the default config to trivy-default.yaml
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
```

View File

@@ -1,29 +1,49 @@
# Config
``` bash
NAME:
trivy config - scan config files
Scan config files for misconfigurations
USAGE:
trivy config [command options] dir
Usage:
trivy config [flags] DIR
OPTIONS:
--template value, -t value output template [$TRIVY_TEMPLATE]
--format value, -f value format (table, json, sarif, template) (default: "table") [$TRIVY_FORMAT]
--severity value, -s value severities of vulnerabilities to be displayed (comma separated) (default: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL") [$TRIVY_SEVERITY]
--output value, -o value output file name [$TRIVY_OUTPUT]
--exit-code value Exit code when vulnerabilities were found (default: 0) [$TRIVY_EXIT_CODE]
--skip-policy-update skip updating built-in policies (default: false) [$TRIVY_SKIP_POLICY_UPDATE]
--reset remove all caches and database (default: false) [$TRIVY_RESET]
--clear-cache, -c clear image caches without scanning (default: false) [$TRIVY_CLEAR_CACHE]
--ignorefile value specify .trivyignore file (default: ".trivyignore") [$TRIVY_IGNOREFILE]
--timeout value timeout (default: 5m0s) [$TRIVY_TIMEOUT]
--skip-files value specify the file paths to skip traversal [$TRIVY_SKIP_FILES]
--skip-dirs value specify the directories where the traversal is skipped [$TRIVY_SKIP_DIRS]
--policy value, --config-policy value specify paths to the Rego policy files directory, applying config files [$TRIVY_POLICY]
--data value, --config-data value specify paths from which data for the Rego policies will be recursively loaded [$TRIVY_DATA]
--policy-namespaces value, --namespaces value Rego namespaces (default: "users") [$TRIVY_POLICY_NAMESPACES]
--file-patterns value specify file patterns [$TRIVY_FILE_PATTERNS]
--include-successes include successes of misconfigurations (default: false) [$TRIVY_INCLUDE_SUCCESSES]
--help, -h show help (default: false)
Aliases:
config, conf
Scan Flags
--skip-dirs strings specify the directories where the traversal is skipped
--skip-files strings specify the file paths to skip traversal
Report Flags
--exit-code int specify exit code when any security issues are found
-f, --format string format (table, json, sarif, template, cyclonedx, spdx, spdx-json, github, cosign-vuln) (default "table")
--ignorefile string specify .trivyignore file (default ".trivyignore")
-o, --output string output file name
-s, --severity string severities of security issues to be displayed (comma separated) (default "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL")
-t, --template string output template
Cache Flags
--cache-backend string cache backend (e.g. redis://localhost:6379) (default "fs")
--cache-ttl duration cache TTL when using redis as cache backend
--clear-cache clear image caches without scanning
--redis-ca string redis ca file location, if using redis as cache backend
--redis-cert string redis certificate file location, if using redis as cache backend
--redis-key string redis key file location, if using redis as cache backend
Misconfiguration Flags
--config-data strings specify paths from which data for the Rego policies will be recursively loaded
--config-policy strings specify paths to the Rego policy files directory, applying config files
--file-patterns strings specify config file patterns, available with '--security-checks config'
--include-non-failures include successes and exceptions, available with '--security-checks config'
--policy-namespaces strings Rego namespaces
--trace enable more verbose trace output for custom queries
Global Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
--generate-default-config write the default config to trivy-default.yaml
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
```

View File

@@ -1,39 +1,85 @@
# Filesystem
```bash
NAME:
trivy filesystem - scan local filesystem
Scan local filesystem
USAGE:
trivy filesystem [command options] dir
Usage:
trivy filesystem [flags] PATH
OPTIONS:
--template value, -t value output template [$TRIVY_TEMPLATE]
--format value, -f value format (table, json, sarif, template) (default: "table") [$TRIVY_FORMAT]
--severity value, -s value severities of vulnerabilities to be displayed (comma separated) (default: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL") [$TRIVY_SEVERITY]
--output value, -o value output file name [$TRIVY_OUTPUT]
--exit-code value Exit code when vulnerabilities were found (default: 0) [$TRIVY_EXIT_CODE]
--skip-db-update, --skip-update skip updating vulnerability database (default: false) [$TRIVY_SKIP_UPDATE, $TRIVY_SKIP_DB_UPDATE]
--skip-policy-update skip updating built-in policies (default: false) [$TRIVY_SKIP_POLICY_UPDATE]
--clear-cache, -c clear image caches without scanning (default: false) [$TRIVY_CLEAR_CACHE]
--ignore-unfixed display only fixed vulnerabilities (default: false) [$TRIVY_IGNORE_UNFIXED]
--vuln-type value comma-separated list of vulnerability types (os,library) (default: "os,library") [$TRIVY_VULN_TYPE]
--security-checks value comma-separated list of what security issues to detect (vuln,config) (default: "vuln") [$TRIVY_SECURITY_CHECKS]
--ignorefile value specify .trivyignore file (default: ".trivyignore") [$TRIVY_IGNOREFILE]
--cache-backend value cache backend (e.g. redis://localhost:6379) (default: "fs") [$TRIVY_CACHE_BACKEND]
--timeout value timeout (default: 5m0s) [$TRIVY_TIMEOUT]
--no-progress suppress progress bar (default: false) [$TRIVY_NO_PROGRESS]
--ignore-policy value specify the Rego file to evaluate each vulnerability [$TRIVY_IGNORE_POLICY]
--list-all-pkgs enabling the option will output all packages regardless of vulnerability (default: false) [$TRIVY_LIST_ALL_PKGS]
--offline-scan do not issue API requests to identify dependencies (default: false) [$TRIVY_OFFLINE_SCAN]
--skip-files value specify the file paths to skip traversal [$TRIVY_SKIP_FILES]
--skip-dirs value specify the directories where the traversal is skipped [$TRIVY_SKIP_DIRS]
--config-policy value specify paths to the Rego policy files directory, applying config files [$TRIVY_CONFIG_POLICY]
--config-data value specify paths from which data for the Rego policies will be recursively loaded [$TRIVY_CONFIG_DATA]
--policy-namespaces value, --namespaces value Rego namespaces (default: "users") [$TRIVY_POLICY_NAMESPACES]
--server value server address [$TRIVY_SERVER]
--token value for authentication [$TRIVY_TOKEN]
--token-header value specify a header name for token (default: "Trivy-Token") [$TRIVY_TOKEN_HEADER]
--custom-headers value custom headers [$TRIVY_CUSTOM_HEADERS]
--help, -h show help (default: false)
Aliases:
filesystem, fs
Examples:
# Scan a local project including language-specific files
$ trivy fs /path/to/your_project
# Scan a single file
$ trivy fs ./trivy-ci-test/Pipfile.lock
Scan Flags
--offline-scan do not issue API requests to identify dependencies
--security-checks string comma-separated list of what security issues to detect (vuln,config,secret) (default "vuln,secret")
--skip-dirs strings specify the directories where the traversal is skipped
--skip-files strings specify the file paths to skip traversal
Report Flags
--dependency-tree show dependency origin tree (EXPERIMENTAL)
--exit-code int specify exit code when any security issues are found
-f, --format string format (table, json, sarif, template, cyclonedx, spdx, spdx-json, github, cosign-vuln) (default "table")
--ignore-policy string specify the Rego file path to evaluate each vulnerability
--ignorefile string specify .trivyignore file (default ".trivyignore")
--list-all-pkgs enabling the option will output all packages regardless of vulnerability
-o, --output string output file name
-s, --severity string severities of security issues to be displayed (comma separated) (default "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL")
-t, --template string output template
Cache Flags
--cache-backend string cache backend (e.g. redis://localhost:6379) (default "fs")
--cache-ttl duration cache TTL when using redis as cache backend
--clear-cache clear image caches without scanning
--redis-ca string redis ca file location, if using redis as cache backend
--redis-cert string redis certificate file location, if using redis as cache backend
--redis-key string redis key file location, if using redis as cache backend
DB Flags
--db-repository string OCI repository to retrieve trivy-db from (default "ghcr.io/aquasecurity/trivy-db")
--download-db-only download/update vulnerability database but don't run a scan
--no-progress suppress progress bar
--reset remove all caches and database
--skip-db-update skip updating vulnerability database
Vulnerability Flags
--ignore-unfixed display only fixed vulnerabilities
--vuln-type string comma-separated list of vulnerability types (os,library) (default "os,library")
Misconfiguration Flags
--config-data strings specify paths from which data for the Rego policies will be recursively loaded
--config-policy strings specify paths to the Rego policy files directory, applying config files
--file-patterns strings specify config file patterns, available with '--security-checks config'
--include-non-failures include successes and exceptions, available with '--security-checks config'
--policy-namespaces strings Rego namespaces
--trace enable more verbose trace output for custom queries
Secret Flags
--secret-config string specify a path to config file for secret scanning (default "trivy-secret.yaml")
License Flags
--ignored-licenses strings specify a list of license to ignore
--license-full eagerly look for licenses in source code headers and license files
Client/Server Flags
--custom-headers strings custom headers in client mode
--server string server address in client mode
--token string for authentication in client/server mode
--token-header string specify a header name for token in client/server mode (default "Trivy-Token")
Global Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
--generate-default-config write the default config to trivy-default.yaml
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
```

View File

@@ -1,34 +1,103 @@
# Image
```bash
NAME:
trivy image - scan an image
Scan a container image
USAGE:
trivy image [command options] image_name
Usage:
trivy image [flags] IMAGE_NAME
OPTIONS:
--template value, -t value output template [$TRIVY_TEMPLATE]
--format value, -f value format (table, json, sarif, template) (default: "table") [$TRIVY_FORMAT]
--input value, -i value input file path instead of image name [$TRIVY_INPUT]
--severity value, -s value severities of vulnerabilities to be displayed (comma separated) (default: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL") [$TRIVY_SEVERITY]
--output value, -o value output file name [$TRIVY_OUTPUT]
--exit-code value Exit code when vulnerabilities were found (default: 0) [$TRIVY_EXIT_CODE]
--skip-update skip db update (default: false) [$TRIVY_SKIP_UPDATE]
--download-db-only download/update vulnerability database but don't run a scan (default: false) [$TRIVY_DOWNLOAD_DB_ONLY]
--reset remove all caches and database (default: false) [$TRIVY_RESET]
--clear-cache, -c clear image caches without scanning (default: false) [$TRIVY_CLEAR_CACHE]
--no-progress suppress progress bar (default: false) [$TRIVY_NO_PROGRESS]
--ignore-unfixed display only fixed vulnerabilities (default: false) [$TRIVY_IGNORE_UNFIXED]
--removed-pkgs detect vulnerabilities of removed packages (only for Alpine) (default: false) [$TRIVY_REMOVED_PKGS]
--vuln-type value comma-separated list of vulnerability types (os,library) (default: "os,library") [$TRIVY_VULN_TYPE]
--ignorefile value specify .trivyignore file (default: ".trivyignore") [$TRIVY_IGNOREFILE]
--timeout value timeout (default: 5m0s) [$TRIVY_TIMEOUT]
--ignore-policy value specify the Rego file to evaluate each vulnerability [$TRIVY_IGNORE_POLICY]
--list-all-pkgs enabling the option will output all packages regardless of vulnerability (default: false) [$TRIVY_LIST_ALL_PKGS]
--offline-scan do not issue API requests to identify dependencies (default: false) [$TRIVY_OFFLINE_SCAN]
--skip-files value specify the file path to skip traversal [$TRIVY_SKIP_FILES]
--skip-dirs value specify the directory where the traversal is skipped [$TRIVY_SKIP_DIRS]
--cache-backend value cache backend (e.g. redis://localhost:6379) (default: "fs") [$TRIVY_CACHE_BACKEND]
--help, -h show help (default: false)
Aliases:
image, i
Examples:
# Scan a container image
$ trivy image python:3.4-alpine
# Scan a container image from a tar archive
$ trivy image --input ruby-3.1.tar
# Filter by severities
$ trivy image --severity HIGH,CRITICAL alpine:3.15
# Ignore unfixed/unpatched vulnerabilities
$ trivy image --ignore-unfixed alpine:3.15
# Scan a container image in client mode
$ trivy image --server http://127.0.0.1:4954 alpine:latest
# Generate json result
$ trivy image --format json --output result.json alpine:3.15
# Generate a report in the CycloneDX format
$ trivy image --format cyclonedx --output result.cdx alpine:3.15
Scan Flags
--offline-scan do not issue API requests to identify dependencies
--security-checks string comma-separated list of what security issues to detect (vuln,config,secret) (default "vuln,secret")
--skip-dirs strings specify the directories where the traversal is skipped
--skip-files strings specify the file paths to skip traversal
Report Flags
--exit-code int specify exit code when any security issues are found
-f, --format string format (table, json, sarif, template, cyclonedx, spdx, spdx-json, github, cosign-vuln) (default "table")
--ignore-policy string specify the Rego file path to evaluate each vulnerability
--ignorefile string specify .trivyignore file (default ".trivyignore")
--list-all-pkgs enabling the option will output all packages regardless of vulnerability
-o, --output string output file name
-s, --severity string severities of security issues to be displayed (comma separated) (default "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL")
-t, --template string output template
Cache Flags
--cache-backend string cache backend (e.g. redis://localhost:6379) (default "fs")
--cache-ttl duration cache TTL when using redis as cache backend
--clear-cache clear image caches without scanning
--redis-ca string redis ca file location, if using redis as cache backend
--redis-cert string redis certificate file location, if using redis as cache backend
--redis-key string redis key file location, if using redis as cache backend
DB Flags
--db-repository string OCI repository to retrieve trivy-db from (default "ghcr.io/aquasecurity/trivy-db")
--download-db-only download/update vulnerability database but don't run a scan
--no-progress suppress progress bar
--reset remove all caches and database
--skip-db-update skip updating vulnerability database
Image Flags
--input string input file path instead of image name
--removed-pkgs detect vulnerabilities of removed packages (only for Alpine)
Vulnerability Flags
--ignore-unfixed display only fixed vulnerabilities
--vuln-type string comma-separated list of vulnerability types (os,library) (default "os,library")
Misconfiguration Flags
--config-data strings specify paths from which data for the Rego policies will be recursively loaded
--config-policy strings specify paths to the Rego policy files directory, applying config files
--file-patterns strings specify config file patterns, available with '--security-checks config'
--include-non-failures include successes and exceptions, available with '--security-checks config'
--policy-namespaces strings Rego namespaces
--trace enable more verbose trace output for custom queries
Secret Flags
--secret-config string specify a path to config file for secret scanning (default "trivy-secret.yaml")
License Flags
--ignored-licenses strings specify a list of license to ignore
--license-full eagerly look for licenses in source code headers and license files
Client/Server Flags
--custom-headers strings custom headers in client mode
--server string server address in client mode
--token string for authentication in client/server mode
--token-header string specify a header name for token in client/server mode (default "Trivy-Token")
Global Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
--generate-default-config write the default config to trivy-default.yaml
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
```

View File

@@ -1,31 +1,50 @@
Trivy has several sub commands, image, fs, repo, client and server.
``` bash
NAME:
trivy - A simple and comprehensive vulnerability scanner for containers
Scanner for vulnerabilities in container images, file systems, and Git repositories, as well as for configuration issues and hard-coded secrets
USAGE:
trivy [global options] command [command options] target
Usage:
trivy [global flags] command [flags] target
trivy [command]
VERSION:
dev
Examples:
# Scan a container image
$ trivy image python:3.4-alpine
COMMANDS:
image, i scan an image
filesystem, fs scan local filesystem
repository, repo scan remote repository
client, c client mode
server, s server mode
config, conf scan config files
plugin, p manage plugins
version print the version
help, h Shows a list of commands or help for one command
# Scan a container image from a tar archive
$ trivy image --input ruby-3.1.tar
GLOBAL OPTIONS:
--quiet, -q suppress progress bar and log output (default: false) [$TRIVY_QUIET]
--debug, -d debug mode (default: false) [$TRIVY_DEBUG]
--cache-dir value cache directory (default: "/Users/teppei/Library/Caches/trivy") [$TRIVY_CACHE_DIR]
--help, -h show help (default: false)
--version, -v print the version (default: false)
# Scan local filesystem
$ trivy fs .
# Run in server mode
$ trivy server
Available Commands:
config Scan config files for misconfigurations
filesystem Scan local filesystem
help Help about any command
image Scan a container image
kubernetes scan kubernetes cluster
module Manage modules
plugin Manage plugins
repository Scan a remote repository
rootfs Scan rootfs
sbom Scan SBOM for vulnerabilities
server Server mode
version Print the version
Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
-f, --format string version format (json)
--generate-default-config write the default config to trivy-default.yaml
-h, --help help for trivy
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
Use "trivy [command] --help" for more information about a command.
```

View File

@@ -0,0 +1,30 @@
# Module
```bash
Manage modules
Usage:
trivy module [command]
Aliases:
module, m
Available Commands:
install Install a module
uninstall Uninstall a module
Flags:
-h, --help help for module
Global Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
--generate-default-config write the default config to trivy-default.yaml
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
Use "trivy module [command] --help" for more information about a command.
```

View File

@@ -0,0 +1,34 @@
# Plugin
```bash
Manage plugins
Usage:
trivy plugin [command]
Aliases:
plugin, p
Available Commands:
info Show information about the specified plugin
install Install a plugin
list List installed plugin
run Run a plugin on the fly
uninstall Uninstall a plugin
update Update an existing plugin
Flags:
-h, --help help for plugin
Global Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
--generate-default-config write the default config to trivy-default.yaml
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
Use "trivy plugin [command] --help" for more information about a command.
```

View File

@@ -1,173 +0,0 @@
# Plugins
Trivy provides a plugin feature to allow others to extend the Trivy CLI without the need to change the Trivycode base.
This plugin system was inspired by the plugin system used in [kubectl][kubectl], [Helm][helm], and [Conftest][conftest].
## Overview
Trivy plugins are add-on tools that integrate seamlessly with Trivy.
They provide a way to extend the core feature set of Trivy, but without requiring every new feature to be written in Go and added to the core tool.
- They can be added and removed from a Trivy installation without impacting the core Trivy tool.
- They can be written in any programming language.
- They integrate with Trivy, and will show up in Trivy help and subcommands.
!!! warning
Trivy plugins available in public are not audited for security.
You should install and run third-party plugins at your own risk, since they are arbitrary programs running on your machine.
## Installing a Plugin
A plugin can be installed using the `trivy plugin install` command.
This command takes a url and will download the plugin and install it in the plugin cache.
Trivy adheres to the XDG specification, so the location depends on whether XDG_DATA_HOME is set.
Trivy will now search XDG_DATA_HOME for the location of the Trivy plugins cache.
The preference order is as follows:
- XDG_DATA_HOME if set and .trivy/plugins exists within the XDG_DATA_HOME dir
- ~/.trivy/plugins
Under the hood Trivy leverages [go-getter][go-getter] to download plugins.
This means the following protocols are supported for downloading plugins:
- OCI Registries
- Local Files
- Git
- HTTP/HTTPS
- Mercurial
- Amazon S3
- Google Cloud Storage
For example, to download the Kubernetes Trivy plugin you can execute the following command:
```bash
$ trivy plugin install github.com/aquasecurity/trivy-plugin-kubectl
```
## Using Plugins
Once the plugin is installed, Trivy will load all available plugins in the cache on the start of the next Trivy execution.
A plugin will be made in the Trivy CLI based on the plugin name.
To display all plugins, you can list them by `trivy --help`
```bash
$ trivy --help
NAME:
trivy - A simple and comprehensive vulnerability scanner for containers
USAGE:
trivy [global options] command [command options] target
VERSION:
dev
COMMANDS:
image, i scan an image
filesystem, fs scan local filesystem
repository, repo scan remote repository
client, c client mode
server, s server mode
plugin, p manage plugins
kubectl scan kubectl resources
help, h Shows a list of commands or help for one command
```
As shown above, `kubectl` subcommand exists in the `COMMANDS` section.
To call the kubectl plugin and scan existing Kubernetes deployments, you can execute the following command:
```
$ trivy kubectl deployment <deployment-id> -- --ignore-unfixed --severity CRITICAL
```
Internally the kubectl plugin calls the kubectl binary to fetch information about that deployment and passes the using images to Trivy.
You can see the detail [here][trivy-plugin-kubectl].
If you want to omit even the subcommand, you can use `TRIVY_RUN_AS_PLUGIN` environment variable.
```bash
$ TRIVY_RUN_AS_PLUGIN=kubectl trivy job your-job -- --format json
```
## Installing and Running Plugins on the fly
`trivy plugin run` installs a plugin and runs it on the fly.
If the plugin is already present in the cache, the installation is skipped.
```bash
trivy plugin run github.com/aquasecurity/trivy-plugin-kubectl pod your-pod -- --exit-code 1
```
## Uninstalling Plugins
Specify a plugin name with `trivy plugin uninstall` command.
```bash
$ trivy plugin uninstall kubectl
```
## Building Plugins
Each plugin has a top-level directory, and then a plugin.yaml file.
```bash
your-plugin/
|
|- plugin.yaml
|- your-plugin.sh
```
In the example above, the plugin is contained inside of a directory named `your-plugin`.
It has two files: plugin.yaml (required) and an executable script, your-plugin.sh (optional).
The core of a plugin is a simple YAML file named plugin.yaml.
Here is an example YAML of trivy-plugin-kubectl plugin that adds support for Kubernetes scanning.
```yaml
name: "kubectl"
repository: github.com/aquasecurity/trivy-plugin-kubectl
version: "0.1.0"
usage: scan kubectl resources
description: |-
A Trivy plugin that scans the images of a kubernetes resource.
Usage: trivy kubectl TYPE[.VERSION][.GROUP] NAME
platforms:
- selector: # optional
os: darwin
arch: amd64
uri: ./trivy-kubectl # where the execution file is (local file, http, git, etc.)
bin: ./trivy-kubectl # path to the execution file
- selector: # optional
os: linux
arch: amd64
uri: https://github.com/aquasecurity/trivy-plugin-kubectl/releases/download/v0.1.0/trivy-kubectl.tar.gz
bin: ./trivy-kubectl
```
The `plugin.yaml` field should contain the following information:
- name: The name of the plugin. This also determines how the plugin will be made available in the Trivy CLI. For example, if the plugin is named kubectl, you can call the plugin with `trivy kubectl`. (required)
- version: The version of the plugin. (required)
- usage: A short usage description. (required)
- description: A long description of the plugin. This is where you could provide a helpful documentation of your plugin. (required)
- platforms: (required)
- selector: The OS/Architecture specific variations of a execution file. (optional)
- os: OS information based on GOOS (linux, darwin, etc.) (optional)
- arch: The architecture information based on GOARCH (amd64, arm64, etc.) (optional)
- uri: Where the executable file is. Relative path from the root directory of the plugin or remote URL such as HTTP and S3. (required)
- bin: Which file to call when the plugin is executed. Relative path from the root directory of the plugin. (required)
The following rules will apply in deciding which platform to select:
- If both `os` and `arch` under `selector` match the current platform, search will stop and the platform will be used.
- If `selector` is not present, the platform will be used.
- If `os` matches and there is no more specific `arch` match, the platform will be used.
- If no `platform` match is found, Trivy will exit with an error.
After determining platform, Trivy will download the execution file from `uri` and store it in the plugin cache.
When the plugin is called via Trivy CLI, `bin` command will be executed.
The plugin is responsible for handling flags and arguments. Any arguments are passed to the plugin from the `trivy` command.
## Example
https://github.com/aquasecurity/trivy-plugin-kubectl
[kubectl]: https://kubernetes.io/docs/tasks/extend-kubectl/kubectl-plugins/
[helm]: https://helm.sh/docs/topics/plugins/
[conftest]: https://www.conftest.dev/plugins/
[go-getter]: https://github.com/hashicorp/go-getter
[trivy-plugin-kubectl]: https://github.com/aquasecurity/trivy-plugin-kubectl

View File

@@ -1,33 +1,87 @@
# Repository
```bash
NAME:
trivy repository - scan remote repository
Scan a remote repository
USAGE:
trivy repository [command options] repo_url
Usage:
trivy repository [flags] REPO_URL
OPTIONS:
--template value, -t value output template [$TRIVY_TEMPLATE]
--format value, -f value format (table, json, sarif, template) (default: "table") [$TRIVY_FORMAT]
--input value, -i value input file path instead of image name [$TRIVY_INPUT]
--severity value, -s value severities of vulnerabilities to be displayed (comma separated) (default: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL") [$TRIVY_SEVERITY]
--output value, -o value output file name [$TRIVY_OUTPUT]
--exit-code value Exit code when vulnerabilities were found (default: 0) [$TRIVY_EXIT_CODE]
--skip-update skip db update (default: false) [$TRIVY_SKIP_UPDATE]
--clear-cache, -c clear image caches without scanning (default: false) [$TRIVY_CLEAR_CACHE]
--ignore-unfixed display only fixed vulnerabilities (default: false) [$TRIVY_IGNORE_UNFIXED]
--removed-pkgs detect vulnerabilities of removed packages (only for Alpine) (default: false) [$TRIVY_REMOVED_PKGS]
--vuln-type value comma-separated list of vulnerability types (os,library) (default: "os,library") [$TRIVY_VULN_TYPE]
--ignorefile value specify .trivyignore file (default: ".trivyignore") [$TRIVY_IGNOREFILE]
--cache-backend value cache backend (e.g. redis://localhost:6379) (default: "fs") [$TRIVY_CACHE_BACKEND]
--timeout value timeout (default: 5m0s) [$TRIVY_TIMEOUT]
--no-progress suppress progress bar (default: false) [$TRIVY_NO_PROGRESS]
--quiet, -q suppress progress bar and log output (default: false) [$TRIVY_QUIET]
--ignore-policy value specify the Rego file to evaluate each vulnerability [$TRIVY_IGNORE_POLICY]
--list-all-pkgs enabling the option will output all packages regardless of vulnerability (default: false) [$TRIVY_LIST_ALL_PKGS]
--offline-scan do not issue API requests to identify dependencies (default: false) [$TRIVY_OFFLINE_SCAN]
--skip-files value specify the file path to skip traversal [$TRIVY_SKIP_FILES]
--skip-dirs value specify the directory where the traversal is skipped [$TRIVY_SKIP_DIRS]
--help, -h show help (default: false)
Aliases:
repository, repo
Examples:
# Scan your remote git repository
$ trivy repo https://github.com/knqyf263/trivy-ci-test
Scan Flags
--offline-scan do not issue API requests to identify dependencies
--security-checks string comma-separated list of what security issues to detect (vuln,config,secret) (default "vuln,secret")
--skip-dirs strings specify the directories where the traversal is skipped
--skip-files strings specify the file paths to skip traversal
Report Flags
--dependency-tree show dependency origin tree (EXPERIMENTAL)
--exit-code int specify exit code when any security issues are found
-f, --format string format (table, json, sarif, template, cyclonedx, spdx, spdx-json, github, cosign-vuln) (default "table")
--ignore-policy string specify the Rego file path to evaluate each vulnerability
--ignorefile string specify .trivyignore file (default ".trivyignore")
--list-all-pkgs enabling the option will output all packages regardless of vulnerability
-o, --output string output file name
-s, --severity string severities of security issues to be displayed (comma separated) (default "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL")
-t, --template string output template
Cache Flags
--cache-backend string cache backend (e.g. redis://localhost:6379) (default "fs")
--cache-ttl duration cache TTL when using redis as cache backend
--clear-cache clear image caches without scanning
--redis-ca string redis ca file location, if using redis as cache backend
--redis-cert string redis certificate file location, if using redis as cache backend
--redis-key string redis key file location, if using redis as cache backend
DB Flags
--db-repository string OCI repository to retrieve trivy-db from (default "ghcr.io/aquasecurity/trivy-db")
--download-db-only download/update vulnerability database but don't run a scan
--no-progress suppress progress bar
--reset remove all caches and database
--skip-db-update skip updating vulnerability database
Vulnerability Flags
--ignore-unfixed display only fixed vulnerabilities
--vuln-type string comma-separated list of vulnerability types (os,library) (default "os,library")
Misconfiguration Flags
--config-data strings specify paths from which data for the Rego policies will be recursively loaded
--config-policy strings specify paths to the Rego policy files directory, applying config files
--file-patterns strings specify config file patterns, available with '--security-checks config'
--include-non-failures include successes and exceptions, available with '--security-checks config'
--policy-namespaces strings Rego namespaces
--trace enable more verbose trace output for custom queries
Secret Flags
--secret-config string specify a path to config file for secret scanning (default "trivy-secret.yaml")
License Flags
--ignored-licenses strings specify a list of license to ignore
--license-full eagerly look for licenses in source code headers and license files
Client/Server Flags
--custom-headers strings custom headers in client mode
--server string server address in client mode
--token string for authentication in client/server mode
--token-header string specify a header name for token in client/server mode (default "Trivy-Token")
Repository Flags
--branch string pass the branch name to be scanned
--commit string pass the commit hash to be scanned
--tag string pass the tag name to be scanned
Global Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
--generate-default-config write the default config to trivy-default.yaml
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
```

View File

@@ -1,35 +1,94 @@
# Rootfs
```bash
NAME:
trivy rootfs - scan rootfs
Scan rootfs
USAGE:
trivy rootfs [command options] dir
Usage:
trivy rootfs [flags] ROOTDIR
OPTIONS:
--template value, -t value output template [$TRIVY_TEMPLATE]
--format value, -f value format (table, json, sarif, template) (default: "table") [$TRIVY_FORMAT]
--severity value, -s value severities of vulnerabilities to be displayed (comma separated) (default: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL") [$TRIVY_SEVERITY]
--output value, -o value output file name [$TRIVY_OUTPUT]
--exit-code value Exit code when vulnerabilities were found (default: 0) [$TRIVY_EXIT_CODE]
--skip-db-update, --skip-update skip updating vulnerability database (default: false) [$TRIVY_SKIP_UPDATE, $TRIVY_SKIP_DB_UPDATE]
--skip-policy-update skip updating built-in policies (default: false) [$TRIVY_SKIP_POLICY_UPDATE]
--clear-cache, -c clear image caches without scanning (default: false) [$TRIVY_CLEAR_CACHE]
--ignore-unfixed display only fixed vulnerabilities (default: false) [$TRIVY_IGNORE_UNFIXED]
--vuln-type value comma-separated list of vulnerability types (os,library) (default: "os,library") [$TRIVY_VULN_TYPE]
--security-checks value comma-separated list of what security issues to detect (vuln,config) (default: "vuln") [$TRIVY_SECURITY_CHECKS]
--ignorefile value specify .trivyignore file (default: ".trivyignore") [$TRIVY_IGNOREFILE]
--cache-backend value cache backend (e.g. redis://localhost:6379) (default: "fs") [$TRIVY_CACHE_BACKEND]
--timeout value timeout (default: 5m0s) [$TRIVY_TIMEOUT]
--no-progress suppress progress bar (default: false) [$TRIVY_NO_PROGRESS]
--ignore-policy value specify the Rego file to evaluate each vulnerability [$TRIVY_IGNORE_POLICY]
--list-all-pkgs enabling the option will output all packages regardless of vulnerability (default: false) [$TRIVY_LIST_ALL_PKGS]
--offline-scan do not issue API requests to identify dependencies (default: false) [$TRIVY_OFFLINE_SCAN]
--skip-files value specify the file paths to skip traversal [$TRIVY_SKIP_FILES]
--skip-dirs value specify the directories where the traversal is skipped [$TRIVY_SKIP_DIRS]
--config-policy value specify paths to the Rego policy files directory, applying config files [$TRIVY_CONFIG_POLICY]
--config-data value specify paths from which data for the Rego policies will be recursively loaded [$TRIVY_CONFIG_DATA]
--policy-namespaces value, --namespaces value Rego namespaces (default: "users") [$TRIVY_POLICY_NAMESPACES]
--help, -h show help (default: false)
```
Examples:
# Scan unpacked filesystem
$ docker export $(docker create alpine:3.10.2) | tar -C /tmp/rootfs -xvf -
$ trivy rootfs /tmp/rootfs
# Scan from inside a container
$ docker run --rm -it alpine:3.11
/ # curl -sfL https://raw.githubusercontent.com/aquasecurity/trivy/main/contrib/install.sh | sh -s -- -b /usr/local/bin
/ # trivy rootfs /
Scan Flags
--file-patterns strings specify config file patterns
--offline-scan do not issue API requests to identify dependencies
--rekor-url string [EXPERIMENTAL] address of rekor STL server (default "https://rekor.sigstore.dev")
--sbom-sources strings [EXPERIMENTAL] try to retrieve SBOM from the specified sources (rekor)
--security-checks strings comma-separated list of what security issues to detect (vuln,config,secret,license) (default [vuln,secret])
--skip-dirs strings specify the directories where the traversal is skipped
--skip-files strings specify the file paths to skip traversal
Report Flags
--dependency-tree show dependency origin tree (EXPERIMENTAL)
--exit-code int specify exit code when any security issues are found
-f, --format string format (table, json, sarif, template, cyclonedx, spdx, spdx-json, github, cosign-vuln) (default "table")
--ignore-policy string specify the Rego file path to evaluate each vulnerability
--ignorefile string specify .trivyignore file (default ".trivyignore")
--list-all-pkgs enabling the option will output all packages regardless of vulnerability
-o, --output string output file name
-s, --severity string severities of security issues to be displayed (comma separated) (default "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL")
-t, --template string output template
Cache Flags
--cache-backend string cache backend (e.g. redis://localhost:6379) (default "fs")
--cache-ttl duration cache TTL when using redis as cache backend
--clear-cache clear image caches without scanning
--redis-ca string redis ca file location, if using redis as cache backend
--redis-cert string redis certificate file location, if using redis as cache backend
--redis-key string redis key file location, if using redis as cache backend
DB Flags
--db-repository string OCI repository to retrieve trivy-db from (default "ghcr.io/aquasecurity/trivy-db")
--download-db-only download/update vulnerability database but don't run a scan
--no-progress suppress progress bar
--reset remove all caches and database
--skip-db-update skip updating vulnerability database
Vulnerability Flags
--ignore-unfixed display only fixed vulnerabilities
--vuln-type string comma-separated list of vulnerability types (os,library) (default "os,library")
Misconfiguration Flags
--helm-set strings specify Helm values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)
--helm-set-file strings specify Helm values from respective files specified via the command line (can specify multiple or separate values with commas: key1=path1,key2=path2)
--helm-set-string strings specify Helm string values on the command line (can specify multiple or separate values with commas: key1=val1,key2=val2)
--helm-values strings specify paths to override the Helm values.yaml files
--include-non-failures include successes and exceptions, available with '--security-checks config'
--tf-vars strings specify paths to override the Terraform tfvars files
Secret Flags
--secret-config string specify a path to config file for secret scanning (default "trivy-secret.yaml")
License Flags
--ignored-licenses strings specify a list of license to ignore
--license-full eagerly look for licenses in source code headers and license files
Rego Flags
--config-data strings specify paths from which data for the Rego policies will be recursively loaded
--config-policy strings specify paths to the Rego policy files directory, applying config files
--policy-namespaces strings Rego namespaces
--trace enable more verbose trace output for custom queries
Client/Server Flags
--custom-headers strings custom headers in client mode
--server string server address in client mode
--token string for authentication in client/server mode
--token-header string specify a header name for token in client/server mode (default "Trivy-Token")
Global Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
--generate-default-config write the default config to trivy-default.yaml
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
```

View File

@@ -1,19 +1,70 @@
# SBOM
```bash
NAME:
trivy sbom - generate SBOM for an artifact
Scan SBOM for vulnerabilities
USAGE:
trivy sbom [command options] ARTIFACT
Usage:
trivy sbom [flags] SBOM_PATH
OPTIONS:
--output value, -o value output file name [$TRIVY_OUTPUT]
--clear-cache, -c clear image caches without scanning (default: false) [$TRIVY_CLEAR_CACHE]
--ignorefile value specify .trivyignore file (default: ".trivyignore") [$TRIVY_IGNOREFILE]
--timeout value timeout (default: 5m0s) [$TRIVY_TIMEOUT]
--severity value, -s value severities of vulnerabilities to be displayed (comma separated) (default: "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL") [$TRIVY_SEVERITY]
--artifact-type value, --type value input artifact type (image, fs, repo, archive) (default: "image") [$TRIVY_ARTIFACT_TYPE]
--sbom-format value, --format value SBOM format (cyclonedx) (default: "cyclonedx") [$TRIVY_SBOM_FORMAT]
--help, -h show help (default: false)
```
Examples:
# Scan CycloneDX and show the result in tables
$ trivy sbom /path/to/report.cdx
# Scan CycloneDX and generate a CycloneDX report
$ trivy sbom --format cyclonedx /path/to/report.cdx
# Scan CycloneDX-type attestation and show the result in tables
$ trivy sbom /path/to/report.cdx.intoto.jsonl
Scan Flags
--offline-scan do not issue API requests to identify dependencies
--security-checks string comma-separated list of what security issues to detect (vuln,config,secret) (default "vuln,secret")
--skip-dirs strings specify the directories where the traversal is skipped
--skip-files strings specify the file paths to skip traversal
Report Flags
--exit-code int specify exit code when any security issues are found
-f, --format string format (table, json, sarif, template, cyclonedx, spdx, spdx-json, github, cosign-vuln) (default "table")
--ignore-policy string specify the Rego file path to evaluate each vulnerability
--ignorefile string specify .trivyignore file (default ".trivyignore")
--list-all-pkgs enabling the option will output all packages regardless of vulnerability
-o, --output string output file name
-s, --severity string severities of security issues to be displayed (comma separated) (default "UNKNOWN,LOW,MEDIUM,HIGH,CRITICAL")
-t, --template string output template
Cache Flags
--cache-backend string cache backend (e.g. redis://localhost:6379) (default "fs")
--cache-ttl duration cache TTL when using redis as cache backend
--clear-cache clear image caches without scanning
--redis-ca string redis ca file location, if using redis as cache backend
--redis-cert string redis certificate file location, if using redis as cache backend
--redis-key string redis key file location, if using redis as cache backend
DB Flags
--db-repository string OCI repository to retrieve trivy-db from (default "ghcr.io/aquasecurity/trivy-db")
--download-db-only download/update vulnerability database but don't run a scan
--no-progress suppress progress bar
--reset remove all caches and database
--skip-db-update skip updating vulnerability database
Vulnerability Flags
--ignore-unfixed display only fixed vulnerabilities
--vuln-type string comma-separated list of vulnerability types (os,library) (default "os,library")
Client/Server Flags
--custom-headers strings custom headers in client mode
--server string server address in client mode
--token string for authentication in client/server mode
--token-header string specify a header name for token in client/server mode (default "Trivy-Token")
Global Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
--generate-default-config write the default config to trivy-default.yaml
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
```

View File

@@ -1,19 +1,49 @@
# Server
```bash
NAME:
trivy server - server mode
Server mode
USAGE:
trivy server [command options] [arguments...]
Usage:
trivy server [flags]
OPTIONS:
--skip-update skip db update (default: false) [$TRIVY_SKIP_UPDATE]
--download-db-only download/update vulnerability database but don't run a scan (default: false) [$TRIVY_DOWNLOAD_DB_ONLY]
--reset remove all caches and database (default: false) [$TRIVY_RESET]
--cache-backend value cache backend (e.g. redis://localhost:6379) (default: "fs") [$TRIVY_CACHE_BACKEND]
--token value for authentication [$TRIVY_TOKEN]
--token-header value specify a header name for token (default: "Trivy-Token") [$TRIVY_TOKEN_HEADER]
--listen value listen address (default: "localhost:4954") [$TRIVY_LISTEN]
--help, -h show help (default: false)
Aliases:
server, s
Examples:
# Run a server
$ trivy server
# Listen on 0.0.0.0:10000
$ trivy server --listen 0.0.0.0:10000
Cache Flags
--cache-backend string cache backend (e.g. redis://localhost:6379) (default "fs")
--cache-ttl duration cache TTL when using redis as cache backend
--clear-cache clear image caches without scanning
--redis-ca string redis ca file location, if using redis as cache backend
--redis-cert string redis certificate file location, if using redis as cache backend
--redis-key string redis key file location, if using redis as cache backend
DB Flags
--db-repository string OCI repository to retrieve trivy-db from (default "ghcr.io/aquasecurity/trivy-db")
--download-db-only download/update vulnerability database but don't run a scan
--no-progress suppress progress bar
--reset remove all caches and database
--skip-db-update skip updating vulnerability database
Client/Server Flags
--listen string listen address in server mode (default "localhost:4954")
--token string for authentication in client/server mode
--token-header string specify a header name for token in client/server mode (default "Trivy-Token")
Global Flags:
--cache-dir string cache directory (default "/Users/teppei/Library/Caches/trivy")
-c, --config string config path (default "trivy.yaml")
-d, --debug debug mode
--generate-default-config write the default config to trivy-default.yaml
--insecure allow insecure server connections when using TLS
-q, --quiet suppress progress bar and log output
--timeout duration timeout (default 5m0s)
-v, --version show version
```

View File

@@ -0,0 +1,340 @@
# Config file
Trivy can be customized by tweaking a `trivy.yaml` file. The config path can be overridden by the `--config` flag.
An example is [here][example].
## Global Options
```yaml
# Same as '--quiet'
# Default is false
quiet: false
# Same as '--debug'
# Default is false
debug: false
# Same as '--insecure'
# Default is false
insecure: false
# Same as '--timeout'
# Default is '5m'
timeout: 10m
# Same as '--cache-dir'
# Default is your system cache dir
cache-dir: $HOME/.cache/trivy
```
## Report Options
```yaml
# Same as '--format'
# Default is 'table'
format: table
# Same as '--report' (available with 'trivy k8s')
# Default is all
report: all
# Same as '--template'
# Default is empty
template:
# Same as '--dependency-tree'
# Default is false
dependency-tree: false
# Same as '--list-all-pkgs'
# Default is false
list-all-pkgs: false
# Same as '--ignorefile'
# Default is '.trivyignore'
ignorefile: .trivyignore
# Same as '--ignore-policy'
# Default is empty
ignore-policy:
# Same as '--exit-code'
# Default is 0
exit-code: 0
# Same as '--output'
# Default is empty (stdout)
output:
# Same as '--severity'
# Default is all severities
severity:
- UNKNOWN
- LOW
- MEDIUM
- HIGH
- CRITICAL
```
## Scan Options
Available in client/server mode
```yaml
scan:
# Same as '--file-patterns'
# Default is empty
file-patterns:
-
# Same as '--skip-dirs'
# Default is empty
skip-dirs:
- usr/local/
- etc/
# Same as '--skip-files'
# Default is empty
skip-files:
- package-dev.json
# Same as '--offline-scan'
# Default is false
offline-scan: false
# Same as '--security-checks'
# Default depends on subcommand
security-checks:
- vuln
- config
- secret
```
## Cache Options
```yaml
cache:
# Same as '--cache-backend'
# Default is 'fs'
backend: 'fs'
# Same as '--cache-ttl'
# Default is 0 (no ttl)
ttl: 0
# Redis options
redis:
# Same as '--redis-ca'
# Default is empty
ca:
# Same as '--redis-cert'
# Default is empty
cert:
# Same as '--redis-key'
# Default is empty
key:
```
## DB Options
```yaml
db:
# Same as '--skip-db-update'
# Default is false
skip-update: false
# Same as '--no-progress'
# Default is false
no-progress: false
# Same as '--db-repository'
# Default is 'github.com/aquasecurity-trivy-repo'
repository: github.com/aquasecurity-trivy-repo
```
## Image Options
Available with container image scanning
```yaml
image:
# Same as '--input' (available with 'trivy image')
# Default is empty
input:
# Same as '--removed-pkgs'
# Default is false
removed-pkgs: false
```
## Vulnerability Options
Available with vulnerability scanning
```yaml
vulnerability:
# Same as '--vuln-type'
# Default is 'os,library'
type:
- os
- library
# Same as '--ignore-unfixed'
# Default is false
ignore-unfixed: false
```
## Secret Options
Available with secret scanning
```yaml
secret:
# Same as '--secret-config'
# Default is 'trivy-secret.yaml'
config: config/trivy/secret.yaml
```
## Misconfiguration Options
Available with misconfiguration scanning
```yaml
misconfiguration:
# Same as '--include-non-failures'
# Default is false
include-non-failures: false
# Same as '--trace'
# Default is false
trace: false
# Same as '--config-policy'
# Default is empty
policy:
- policy/repository
- policy/custom
# Same as '--config-data'
# Default is empty
data:
- data/
# Same as '--policy-namespaces'
# Default is empty
namespaces:
- opa.examples
- users
# helm value override configurations
# set individual values
helm:
set:
- securityContext.runAsUser=10001
# set values with file
helm:
values:
- overrides.yaml
# set specific values from specific files
helm:
set-file:
- image=dev-overrides.yaml
# set as string and preserve type
helm:
set-string:
- name=true
# terraform tfvars overrrides
terraform:
vars:
- dev-terraform.tfvars
- common-terraform.tfvars
```
## Kubernetes Options
Available with Kubernetes scanning
```yaml
kubernetes:
# Same as '--context'
# Default is empty
context:
# Same as '--namespace'
# Default is empty
namespace:
```
## Repository Options
Available with git repository scanning (`trivy repo`)
```yaml
repository:
# Same as '--branch'
# Default is empty
branch:
# Same as '--commit'
# Default is empty
commit:
# Same as '--tag'
# Default is empty
tag:
```
## Client/Server Options
Available in client/server mode
```yaml
server:
# Same as '--server' (available in client mode)
# Default is empty
addr: http://localhost:4954
# Same as '--token'
# Default is empty
token: "something-secret"
# Same as '--token-header'
# Default is 'Trivy-Token'
token-header: 'My-Token-Header'
# Same as '--custom-headers'
# Default is empty
custom-headers:
- scanner: trivy
- x-api-token: xxx
# Same as '--listen' (available in server mode)
# Default is 'localhost:4954'
listen: 0.0.0.0:10000
```
## Cloud Options
Available for cloud scanning (currently only `trivy aws`)
```yaml
cloud:
# whether to force a cache update for every scan
update-cache: false
# how old cached results can be before being invalidated
max-cache-age: 24h
# aws-specific cloud settings
aws:
# the aws region to use
region: us-east-1
# the aws endpoint to use (not required for general use)
endpoint: https://my.custom.aws.endpoint
# the aws account to use (this will be determined from your environment when not set)
account: 123456789012
```
[example]: https://github.com/aquasecurity/trivy/tree/{{ git.tag }}/examples/trivy-conf/trivy.yaml

View File

@@ -0,0 +1,17 @@
# Environment variables
Trivy can be customized by environment variables.
The environment variable key is the flag name converted by the following procedure.
- Add `TRIVY_` prefix
- Make it all uppercase
- Replace `-` with `_`
For example,
- `--debug` => `TRIVY_DEBUG`
- `--cache-dir` => `TRIVY_CACHE_DIR`
```
$ TRIVY_DEBUG=true TRIVY_SEVERITY=CRITICAL trivy image alpine:3.15
```

View File

@@ -1,6 +1,6 @@
# Client/Server
Trivy has client/server mode. Trivy server has vulnerability database and Trivy client doesn't have to download vulnerability database. It is useful if you want to scan images at multiple locations and do not want to download the database at every location.
Trivy has client/server mode. Trivy server has vulnerability database and Trivy client doesn't have to download vulnerability database. It is useful if you want to scan images or files at multiple locations and do not want to download the database at every location.
## Server
At first, you need to launch Trivy server. It downloads vulnerability database automatically and continue to fetch the latest DB in the background.
@@ -17,11 +17,12 @@ If you want to accept a connection from outside, you have to specify `0.0.0.0` o
$ trivy server --listen 0.0.0.0:8080
```
## Client
Then, specify the remote address.
## Remote image scan
Then, specify the server address for `image` command.
```
$ trivy client --remote http://localhost:8080 alpine:3.10
$ trivy image --server http://localhost:8080 alpine:3.10
```
**Note**: It's important to specify the protocol (http or https).
<details>
<summary>Result</summary>
@@ -43,6 +44,161 @@ Total: 3 (UNKNOWN: 0, LOW: 1, MEDIUM: 2, HIGH: 0, CRITICAL: 0)
```
</details>
## Remote scan of local filesystem
Also, there is a way to scan local file system:
```shell
$ trivy fs --server http://localhost:8080 --severity CRITICAL ./integration/testdata/fixtures/fs/pom/
```
**Note**: It's important to specify the protocol (http or https).
<details>
<summary>Result</summary>
pom.xml (pom)
=============
Total: 24 (CRITICAL: 24)
+---------------------------------------------+------------------+----------+-------------------+--------------------------------+---------------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+---------------------------------------------+------------------+----------+-------------------+--------------------------------+---------------------------------------+
| com.fasterxml.jackson.core:jackson-databind | CVE-2017-17485 | CRITICAL | 2.9.1 | 2.8.11, 2.9.4 | jackson-databind: Unsafe |
| | | | | | deserialization due to |
| | | | | | incomplete black list (incomplete |
| | | | | | fix for CVE-2017-15095)... |
| | | | | | -->avd.aquasec.com/nvd/cve-2017-17485 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2018-11307 | | | 2.7.9.4, 2.8.11.2, 2.9.6 | jackson-databind: Potential |
| | | | | | information exfiltration with |
| | | | | | default typing, serialization |
| | | | | | gadget from MyBatis |
| | | | | | -->avd.aquasec.com/nvd/cve-2018-11307 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2018-14718 | | | 2.6.7.2, 2.9.7 | jackson-databind: arbitrary code |
| | | | | | execution in slf4j-ext class |
| | | | | | -->avd.aquasec.com/nvd/cve-2018-14718 |
+ +------------------+ + + +---------------------------------------+
| | CVE-2018-14719 | | | | jackson-databind: arbitrary |
| | | | | | code execution in blaze-ds-opt |
| | | | | | and blaze-ds-core classes |
| | | | | | -->avd.aquasec.com/nvd/cve-2018-14719 |
+ +------------------+ + + +---------------------------------------+
| | CVE-2018-14720 | | | | jackson-databind: exfiltration/XXE |
| | | | | | in some JDK classes |
| | | | | | -->avd.aquasec.com/nvd/cve-2018-14720 |
+ +------------------+ + + +---------------------------------------+
| | CVE-2018-14721 | | | | jackson-databind: server-side request |
| | | | | | forgery (SSRF) in axis2-jaxws class |
| | | | | | -->avd.aquasec.com/nvd/cve-2018-14721 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2018-19360 | | | 2.6.7.3, 2.7.9.5, 2.8.11.3, | jackson-databind: improper |
| | | | | 2.9.8 | polymorphic deserialization |
| | | | | | in axis2-transport-jms class |
| | | | | | -->avd.aquasec.com/nvd/cve-2018-19360 |
+ +------------------+ + + +---------------------------------------+
| | CVE-2018-19361 | | | | jackson-databind: improper |
| | | | | | polymorphic deserialization |
| | | | | | in openjpa class |
| | | | | | -->avd.aquasec.com/nvd/cve-2018-19361 |
+ +------------------+ + + +---------------------------------------+
| | CVE-2018-19362 | | | | jackson-databind: improper |
| | | | | | polymorphic deserialization |
| | | | | | in jboss-common-core class |
| | | | | | -->avd.aquasec.com/nvd/cve-2018-19362 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2018-7489 | | | 2.7.9.3, 2.8.11.1, 2.9.5 | jackson-databind: incomplete fix |
| | | | | | for CVE-2017-7525 permits unsafe |
| | | | | | serialization via c3p0 libraries |
| | | | | | -->avd.aquasec.com/nvd/cve-2018-7489 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2019-14379 | | | 2.7.9.6, 2.8.11.4, 2.9.9.2 | jackson-databind: default |
| | | | | | typing mishandling leading |
| | | | | | to remote code execution |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-14379 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2019-14540 | | | 2.9.10 | jackson-databind: |
| | | | | | Serialization gadgets in |
| | | | | | com.zaxxer.hikari.HikariConfig |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-14540 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2019-14892 | | | 2.6.7.3, 2.8.11.5, 2.9.10 | jackson-databind: Serialization |
| | | | | | gadgets in classes of the |
| | | | | | commons-configuration package |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-14892 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2019-14893 | | | 2.8.11.5, 2.9.10 | jackson-databind: |
| | | | | | Serialization gadgets in |
| | | | | | classes of the xalan package |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-14893 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2019-16335 | | | 2.9.10 | jackson-databind: |
| | | | | | Serialization gadgets in |
| | | | | | com.zaxxer.hikari.HikariDataSource |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-16335 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2019-16942 | | | 2.9.10.1 | jackson-databind: |
| | | | | | Serialization gadgets in |
| | | | | | org.apache.commons.dbcp.datasources.* |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-16942 |
+ +------------------+ + + +---------------------------------------+
| | CVE-2019-16943 | | | | jackson-databind: |
| | | | | | Serialization gadgets in |
| | | | | | com.p6spy.engine.spy.P6DataSource |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-16943 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2019-17267 | | | 2.9.10 | jackson-databind: Serialization |
| | | | | | gadgets in classes of |
| | | | | | the ehcache package |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-17267 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2019-17531 | | | 2.9.10.1 | jackson-databind: |
| | | | | | Serialization gadgets in |
| | | | | | org.apache.log4j.receivers.db.* |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-17531 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2019-20330 | | | 2.8.11.5, 2.9.10.2 | jackson-databind: lacks |
| | | | | | certain net.sf.ehcache blocking |
| | | | | | -->avd.aquasec.com/nvd/cve-2019-20330 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2020-8840 | | | 2.7.9.7, 2.8.11.5, 2.9.10.3 | jackson-databind: Lacks certain |
| | | | | | xbean-reflect/JNDI blocking |
| | | | | | -->avd.aquasec.com/nvd/cve-2020-8840 |
+ +------------------+ + +--------------------------------+---------------------------------------+
| | CVE-2020-9546 | | | 2.7.9.7, 2.8.11.6, 2.9.10.4 | jackson-databind: Serialization |
| | | | | | gadgets in shaded-hikari-config |
| | | | | | -->avd.aquasec.com/nvd/cve-2020-9546 |
+ +------------------+ + + +---------------------------------------+
| | CVE-2020-9547 | | | | jackson-databind: Serialization |
| | | | | | gadgets in ibatis-sqlmap |
| | | | | | -->avd.aquasec.com/nvd/cve-2020-9547 |
+ +------------------+ + + +---------------------------------------+
| | CVE-2020-9548 | | | | jackson-databind: Serialization |
| | | | | | gadgets in anteros-core |
| | | | | | -->avd.aquasec.com/nvd/cve-2020-9548 |
+---------------------------------------------+------------------+----------+-------------------+--------------------------------+---------------------------------------+
</details>
## Remote scan of root filesystem
Also, there is a way to scan root file system:
```shell
$ trivy rootfs --server http://localhost:8080 --severity CRITICAL /tmp/rootfs
```
**Note**: It's important to specify the protocol (http or https).
<details>
<summary>Result</summary>
/tmp/rootfs (alpine 3.10.2)
Total: 1 (CRITICAL: 1)
┌───────────┬────────────────┬──────────┬───────────────────┬───────────────┬─────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├───────────┼────────────────┼──────────┼───────────────────┼───────────────┼─────────────────────────────────────────────────────────────┤
│ apk-tools │ CVE-2021-36159 │ CRITICAL │ 2.10.4-r2 │ 2.10.7-r0 │ libfetch before 2021-07-26, as used in apk-tools, xbps, and │
│ │ │ │ │ │ other products, mishandles... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2021-36159 │
└───────────┴────────────────┴──────────┴───────────────────┴───────────────┴─────────────────────────────────────────────────────────────┘
</details>
## Authentication
```
@@ -50,7 +206,7 @@ $ trivy server --listen localhost:8080 --token dummy
```
```
$ trivy client --remote http://localhost:8080 --token dummy alpine:3.10
$ trivy image --server http://localhost:8080 --token dummy alpine:3.10
```
## Architecture

View File

@@ -106,7 +106,32 @@ If trivy is running behind corporate firewall, you have to add the following url
!!! error
--skip-update cannot be specified with the old DB schema.
Trivy v0.23.0 or later requires Trivy DB v2. Please update your local database or follow [the instruction of air-gapped environment][../advanced/air-gap.md].
Trivy v0.23.0 or later requires Trivy DB v2. Please update your local database or follow [the instruction of air-gapped environment][air-gapped].
### Multiple Trivy servers
!!! error
```
$ trivy image --server http://xxx.com:xxxx test-image
...
- twirp error internal: failed scan, test-image: failed to apply layers: layer cache missing: sha256:*****
```
To run multiple Trivy servers, you need to use Redis as the cache backend so that those servers can share the cache.
Follow [this instruction][redis-cache] to do so.
### Problems with `/tmp` on remote Git repository scans
!!! error
FATAL repository scan error: scan error: unable to initialize a scanner: unable to initialize a filesystem scanner: git clone error: write /tmp/fanal-remote...
Trivy clones remote Git repositories under the `/tmp` directory before scanning them. If `/tmp` doesn't work for you, you can change it by setting the `TMPDIR` environment variable.
Try:
```
$ TMPDIR=/my/custom/path trivy repo ...
```
## Homebrew
### Scope error
@@ -157,4 +182,5 @@ Try again with `--reset` option:
$ trivy image --reset
```
[air-gapped]: ../how-to-guides/air-gap.md
[air-gapped]: ../advanced/air-gap.md
[redis-cache]: ../../vulnerability/examples/cache/#cache-backend

View File

@@ -1,12 +1,21 @@
# CycloneDX
Trivy generates JSON reports in the [CycloneDX][cyclonedx] format.
## Generating
Trivy can generate SBOM in the [CycloneDX][cyclonedx] format.
Note that XML format is not supported at the moment.
You can use the regular subcommands (like `image`, `fs` and `rootfs`) and specify `cyclonedx` with the `--format` option.
CycloneDX can represent either or both SBOM or BOV.
- [Software Bill of Materials (SBOM)][sbom]
- [Bill of Vulnerabilities (BOV)][bov]
By default, `--format cyclonedx` represents SBOM and doesn't include vulnerabilities in the CycloneDX output.
```
$ trivy image --format cyclonedx --output result.json alpine:3.15
2022-07-19T07:47:27.624Z INFO "--format cyclonedx" disables security checks. Specify "--security-checks vuln" explicitly if you want to include vulnerabilities in the CycloneDX report.
```
<details>
@@ -230,4 +239,41 @@ $ cat result.json | jq .
</details>
[cyclonedx]: https://cyclonedx.org/
If you want to include vulnerabilities, you can enable vulnerability scanning via `--security-checks vuln`.
```
$ trivy image --security-checks vuln --format cyclonedx --output result.json alpine:3.15
```
## Scanning
Trivy can take CycloneDX as an input and scan for vulnerabilities.
To scan SBOM, you can use the `sbom` subcommand and pass the path to your CycloneDX report.
```bash
$ trivy sbom /path/to/cyclonedx.json
cyclonedx.json (alpine 3.7.1)
=========================
Total: 3 (CRITICAL: 3)
┌─────────────┬────────────────┬──────────┬───────────────────┬───────────────┬──────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├─────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ curl │ CVE-2018-14618 │ CRITICAL │ 7.61.0-r0 │ 7.61.1-r0 │ curl: NTLM password overflow via integer overflow │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2018-14618 │
├─────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ libbz2 │ CVE-2019-12900 │ CRITICAL │ 1.0.6-r6 │ 1.0.6-r7 │ bzip2: out-of-bounds write in function BZ2_decompress │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-12900 │
├─────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────────┤
│ sqlite-libs │ CVE-2019-8457 │ CRITICAL │ 3.21.0-r1 │ 3.25.3-r1 │ sqlite: heap out-of-bound read in function rtreenode()
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-8457 │
└─────────────┴────────────────┴──────────┴───────────────────┴───────────────┴──────────────────────────────────────────────────────────────┘
```
!!! note
If you want to generate a CycloneDX report from a CycloneDX input, please be aware that the output stores references to your original CycloneDX report and contains only detected vulnerabilities, not components.
The report is called [BOV][bov].
[cyclonedx]: https://cyclonedx.org/
[sbom]: https://cyclonedx.org/capabilities/sbom/
[bov]: https://cyclonedx.org/capabilities/bov/

View File

@@ -1,18 +1,20 @@
# SBOM
Trivy currently supports the following SBOM formats.
## Generating
Trivy can generate the following SBOM formats.
- [CycloneDX][cyclonedx]
- [SPDX][spdx]
To generate SBOM, you can use the `--format` option for each subcommand such as `image` and `fs`.
```
$ trivy image --format cyclonedx --output result.json alpine:3.15
$ trivy image --format spdx-json --output result.json alpine:3.15
```
In addition, you can use the `trivy sbom` subcommand.
```
$ trivy sbom alpine:3.15
$ trivy fs --format cyclonedx --output result.json /app/myproject
```
<details>
@@ -175,17 +177,56 @@ $ trivy sbom alpine:3.15
</details>
`fs`, `repo` and `archive` also work with `sbom` subcommand.
## Scanning
Trivy also can take the following SBOM formats as an input and scan for vulnerabilities.
```
# filesystem
$ trivy sbom --artifact-type fs /path/to/project
- CycloneDX
- SPDX
- SPDX JSON
- CycloneDX-type attestation
# repository
$ trivy sbom --artifact-type repo github.com/aquasecurity/trivy-ci-test
To scan SBOM, you can use the `sbom` subcommand and pass the path to the SBOM.
# container image archive
$ trivy sbom --artifact-type archive alpine.tar
```bash
$ trivy sbom /path/to/cyclonedx.json
```
[cyclonedx]: cyclonedx.md
See [here][cyclonedx] for the detail.
!!! note
CycloneDX XML is not supported at the moment.
```bash
$ trivy sbom /path/to/spdx.json
```
See [here][spdx] for the detail.
You can also scan an SBOM attestation.
In the following example, [Cosign][Cosign] can get an attestation and trivy scan it. You must create CycloneDX-type attestation before trying the example. To learn more about how to create an CycloneDX-Type attestation and attach it to an image, see the [SBOM attestation page][sbom_attestation].
```bash
$ cosign verify-attestation --key /path/to/cosign.pub --type cyclonedx <IMAGE> > sbom.cdx.intoto.jsonl
$ trivy sbom ./sbom.cdx.intoto.jsonl
sbom.cdx.intoto.jsonl (alpine 3.7.3)
=========================
Total: 2 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 2)
┌────────────┬────────────────┬──────────┬───────────────────┬───────────────┬──────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├────────────┼────────────────┼──────────┼───────────────────┼───────────────┼──────────────────────────────────────────────────────────┤
│ musl │ CVE-2019-14697 │ CRITICAL │ 1.1.18-r3 │ 1.1.18-r4 │ musl libc through 1.1.23 has an x87 floating-point stack │
│ │ │ │ │ │ adjustment im ...... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2019-14697 │
├────────────┤ │ │ │ │ │
│ musl-utils │ │ │ │ │ │
│ │ │ │ │ │ │
│ │ │ │ │ │ │
└────────────┴────────────────┴──────────┴───────────────────┴───────────────┴──────────────────────────────────────────────────────────┘
```
[cyclonedx]: cyclonedx.md
[spdx]: spdx.md
[Cosign]: https://github.com/sigstore/cosign
[sbom_attestation]: ../attestation/sbom.md#sign-with-a-local-key-pair

344
docs/docs/sbom/spdx.md Normal file
View File

@@ -0,0 +1,344 @@
# SPDX
## Generating
Trivy can generate SBOM in the [SPDX][spdx] format.
You can use the regular subcommands (like `image`, `fs` and `rootfs`) and specify `spdx` with the `--format` option.
```
$ trivy image --format spdx --output result.spdx alpine:3.15
```
<details>
<summary>Result</summary>
```
$ cat result.spdx
SPDXVersion: SPDX-2.2
DataLicense: CC0-1.0
SPDXID: SPDXRef-DOCUMENT
DocumentName: alpine:3.15
DocumentNamespace: http://aquasecurity.github.io/trivy/container_image/alpine:3.15-bebf6b19-a94c-4e2c-af44-065f63923f48
Creator: Organization: aquasecurity
Creator: Tool: trivy
Created: 2022-04-28T07:32:57.142806Z
##### Package: zlib
PackageName: zlib
SPDXID: SPDXRef-12bc938ac028a5e1
PackageVersion: 1.2.12-r0
FilesAnalyzed: false
PackageLicenseConcluded: Zlib
PackageLicenseDeclared: Zlib
##### Package: apk-tools
PackageName: apk-tools
SPDXID: SPDXRef-26c274652190d87f
PackageVersion: 2.12.7-r3
FilesAnalyzed: false
PackageLicenseConcluded: GPL-2.0-only
PackageLicenseDeclared: GPL-2.0-only
##### Package: libretls
PackageName: libretls
SPDXID: SPDXRef-2b021966d19a8211
PackageVersion: 3.3.4-r3
FilesAnalyzed: false
PackageLicenseConcluded: ISC AND (BSD-3-Clause OR MIT)
PackageLicenseDeclared: ISC AND (BSD-3-Clause OR MIT)
##### Package: busybox
PackageName: busybox
SPDXID: SPDXRef-317ce3476703f20d
PackageVersion: 1.34.1-r5
FilesAnalyzed: false
PackageLicenseConcluded: GPL-2.0-only
PackageLicenseDeclared: GPL-2.0-only
##### Package: libcrypto1.1
PackageName: libcrypto1.1
SPDXID: SPDXRef-34f407fb4dbd67f4
PackageVersion: 1.1.1n-r0
FilesAnalyzed: false
PackageLicenseConcluded: OpenSSL
PackageLicenseDeclared: OpenSSL
##### Package: libc-utils
PackageName: libc-utils
SPDXID: SPDXRef-4bbc1cb449d54083
PackageVersion: 0.7.2-r3
FilesAnalyzed: false
PackageLicenseConcluded: BSD-2-Clause AND BSD-3-Clause
PackageLicenseDeclared: BSD-2-Clause AND BSD-3-Clause
##### Package: alpine-keys
PackageName: alpine-keys
SPDXID: SPDXRef-a3bdd174be1456b6
PackageVersion: 2.4-r1
FilesAnalyzed: false
PackageLicenseConcluded: MIT
PackageLicenseDeclared: MIT
##### Package: ca-certificates-bundle
PackageName: ca-certificates-bundle
SPDXID: SPDXRef-ac6472ba26fb991c
PackageVersion: 20211220-r0
FilesAnalyzed: false
PackageLicenseConcluded: MPL-2.0 AND MIT
PackageLicenseDeclared: MPL-2.0 AND MIT
##### Package: libssl1.1
PackageName: libssl1.1
SPDXID: SPDXRef-b2d1b1d70fe90f7d
PackageVersion: 1.1.1n-r0
FilesAnalyzed: false
PackageLicenseConcluded: OpenSSL
PackageLicenseDeclared: OpenSSL
##### Package: scanelf
PackageName: scanelf
SPDXID: SPDXRef-c617077ba6649520
PackageVersion: 1.3.3-r0
FilesAnalyzed: false
PackageLicenseConcluded: GPL-2.0-only
PackageLicenseDeclared: GPL-2.0-only
##### Package: musl
PackageName: musl
SPDXID: SPDXRef-ca80b810029cde0e
PackageVersion: 1.2.2-r7
FilesAnalyzed: false
PackageLicenseConcluded: MIT
PackageLicenseDeclared: MIT
##### Package: alpine-baselayout
PackageName: alpine-baselayout
SPDXID: SPDXRef-d782e64751ba9faa
PackageVersion: 3.2.0-r18
FilesAnalyzed: false
PackageLicenseConcluded: GPL-2.0-only
PackageLicenseDeclared: GPL-2.0-only
##### Package: musl-utils
PackageName: musl-utils
SPDXID: SPDXRef-e5e8a237f6162e22
PackageVersion: 1.2.2-r7
FilesAnalyzed: false
PackageLicenseConcluded: MIT BSD GPL2+
PackageLicenseDeclared: MIT BSD GPL2+
##### Package: ssl_client
PackageName: ssl_client
SPDXID: SPDXRef-fdf0ce84f6337be4
PackageVersion: 1.34.1-r5
FilesAnalyzed: false
PackageLicenseConcluded: GPL-2.0-only
PackageLicenseDeclared: GPL-2.0-only
```
</details>
SPDX-JSON format is also supported by using `spdx-json` with the `--format` option.
```
$ trivy image --format spdx-json --output result.spdx.json alpine:3.15
```
<details>
<summary>Result</summary>
```
$ cat result.spdx.json | jq .
{
"SPDXID": "SPDXRef-DOCUMENT",
"creationInfo": {
"created": "2022-04-28T08:16:55.328255Z",
"creators": [
"Tool: trivy",
"Organization: aquasecurity"
]
},
"dataLicense": "CC0-1.0",
"documentNamespace": "http://aquasecurity.github.io/trivy/container_image/alpine:3.15-d9549e3a-a4c5-4ee3-8bde-8c78d451fbe7",
"name": "alpine:3.15",
"packages": [
{
"SPDXID": "SPDXRef-12bc938ac028a5e1",
"filesAnalyzed": false,
"licenseConcluded": "Zlib",
"licenseDeclared": "Zlib",
"name": "zlib",
"versionInfo": "1.2.12-r0"
},
{
"SPDXID": "SPDXRef-26c274652190d87f",
"filesAnalyzed": false,
"licenseConcluded": "GPL-2.0-only",
"licenseDeclared": "GPL-2.0-only",
"name": "apk-tools",
"versionInfo": "2.12.7-r3"
},
{
"SPDXID": "SPDXRef-2b021966d19a8211",
"filesAnalyzed": false,
"licenseConcluded": "ISC AND (BSD-3-Clause OR MIT)",
"licenseDeclared": "ISC AND (BSD-3-Clause OR MIT)",
"name": "libretls",
"versionInfo": "3.3.4-r3"
},
{
"SPDXID": "SPDXRef-317ce3476703f20d",
"filesAnalyzed": false,
"licenseConcluded": "GPL-2.0-only",
"licenseDeclared": "GPL-2.0-only",
"name": "busybox",
"versionInfo": "1.34.1-r5"
},
{
"SPDXID": "SPDXRef-34f407fb4dbd67f4",
"filesAnalyzed": false,
"licenseConcluded": "OpenSSL",
"licenseDeclared": "OpenSSL",
"name": "libcrypto1.1",
"versionInfo": "1.1.1n-r0"
},
{
"SPDXID": "SPDXRef-4bbc1cb449d54083",
"filesAnalyzed": false,
"licenseConcluded": "BSD-2-Clause AND BSD-3-Clause",
"licenseDeclared": "BSD-2-Clause AND BSD-3-Clause",
"name": "libc-utils",
"versionInfo": "0.7.2-r3"
},
{
"SPDXID": "SPDXRef-a3bdd174be1456b6",
"filesAnalyzed": false,
"licenseConcluded": "MIT",
"licenseDeclared": "MIT",
"name": "alpine-keys",
"versionInfo": "2.4-r1"
},
{
"SPDXID": "SPDXRef-ac6472ba26fb991c",
"filesAnalyzed": false,
"licenseConcluded": "MPL-2.0 AND MIT",
"licenseDeclared": "MPL-2.0 AND MIT",
"name": "ca-certificates-bundle",
"versionInfo": "20211220-r0"
},
{
"SPDXID": "SPDXRef-b2d1b1d70fe90f7d",
"filesAnalyzed": false,
"licenseConcluded": "OpenSSL",
"licenseDeclared": "OpenSSL",
"name": "libssl1.1",
"versionInfo": "1.1.1n-r0"
},
{
"SPDXID": "SPDXRef-c617077ba6649520",
"filesAnalyzed": false,
"licenseConcluded": "GPL-2.0-only",
"licenseDeclared": "GPL-2.0-only",
"name": "scanelf",
"versionInfo": "1.3.3-r0"
},
{
"SPDXID": "SPDXRef-ca80b810029cde0e",
"filesAnalyzed": false,
"licenseConcluded": "MIT",
"licenseDeclared": "MIT",
"name": "musl",
"versionInfo": "1.2.2-r7"
},
{
"SPDXID": "SPDXRef-d782e64751ba9faa",
"filesAnalyzed": false,
"licenseConcluded": "GPL-2.0-only",
"licenseDeclared": "GPL-2.0-only",
"name": "alpine-baselayout",
"versionInfo": "3.2.0-r18"
},
{
"SPDXID": "SPDXRef-e5e8a237f6162e22",
"filesAnalyzed": false,
"licenseConcluded": "MIT BSD GPL2+",
"licenseDeclared": "MIT BSD GPL2+",
"name": "musl-utils",
"versionInfo": "1.2.2-r7"
},
{
"SPDXID": "SPDXRef-fdf0ce84f6337be4",
"filesAnalyzed": false,
"licenseConcluded": "GPL-2.0-only",
"licenseDeclared": "GPL-2.0-only",
"name": "ssl_client",
"versionInfo": "1.34.1-r5"
}
],
"spdxVersion": "SPDX-2.2"
}
```
</details>
## Scanning
Trivy can take the SPDX SBOM as an input and scan for vulnerabilities.
To scan SBOM, you can use the `sbom` subcommand and pass the path to your SPDX report.
The input format is automatically detected.
The following formats are supported:
- Tag-value (`--format spdx`)
- JSON (`--format spdx-json`)
```bash
$ trivy image --format spdx-json --output spdx.json alpine:3.16.0
$ trivy sbom spdx.json
2022-09-15T21:32:27.168+0300 INFO Vulnerability scanning is enabled
2022-09-15T21:32:27.169+0300 INFO Detected SBOM format: spdx-json
2022-09-15T21:32:27.210+0300 INFO Detected OS: alpine
2022-09-15T21:32:27.210+0300 INFO Detecting Alpine vulnerabilities...
2022-09-15T21:32:27.211+0300 INFO Number of language-specific files: 0
spdx.json (alpine 3.16.0)
=========================
Total: 5 (UNKNOWN: 0, LOW: 0, MEDIUM: 2, HIGH: 2, CRITICAL: 1)
┌──────────────┬────────────────┬──────────┬───────────────────┬───────────────┬────────────────────────────────────────────────────────────┐
│ Library │ Vulnerability │ Severity │ Installed Version │ Fixed Version │ Title │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ busybox │ CVE-2022-30065 │ HIGH │ 1.35.0-r13 │ 1.35.0-r15 │ busybox: A use-after-free in Busybox's awk applet leads to │
│ │ │ │ │ │ denial of service... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-30065 │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ libcrypto1.1 │ CVE-2022-2097 │ MEDIUM │ 1.1.1o-r0 │ 1.1.1q-r0 │ openssl: AES OCB fails to encrypt some bytes │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-2097 │
├──────────────┤ │ │ │ │ │
│ libssl1.1 │ │ │ │ │ │
│ │ │ │ │ │ │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ ssl_client │ CVE-2022-30065 │ HIGH │ 1.35.0-r13 │ 1.35.0-r15 │ busybox: A use-after-free in Busybox's awk applet leads to │
│ │ │ │ │ │ denial of service... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-30065 │
├──────────────┼────────────────┼──────────┼───────────────────┼───────────────┼────────────────────────────────────────────────────────────┤
│ zlib │ CVE-2022-37434 │ CRITICAL │ 1.2.12-r1 │ 1.2.12-r2 │ zlib: a heap-based buffer over-read or buffer overflow in │
│ │ │ │ │ │ inflate in inflate.c... │
│ │ │ │ │ │ https://avd.aquasec.com/nvd/cve-2022-37434 │
└──────────────┴────────────────┴──────────┴───────────────────┴───────────────┴────────────────────────────────────────────────────────────┘
```
[spdx]: https://spdx.dev/wp-content/uploads/sites/41/2020/08/SPDX-specification-2-2.pdf

View File

@@ -0,0 +1,142 @@
# Configuration
Trivy tries to load `trivy-secret.yaml` in the current directory by default.
If the file doesn't exist, only built-in rules are used.
You can customize the config file path via the `--secret-config` flag.
You can see the example [here][examples].
## Custom Rules
Trivy allows defining custom rules. You can see an example.
``` yaml
rules:
- id: rule1
category: general
title: Generic Rule
severity: HIGH
path: .*\.sh
keywords:
- secret
regex: (?i)(?P<key>(secret))(=|:).{0,5}['"](?P<secret>[0-9a-zA-Z\-_=]{8,64})['"]
secret-group-name: secret
allow-rules:
- id: skip-text
description: skip text files
path: .*\.txt
```
`id` (required)
: - Unique identifier for this rule.
`category` (required)
: - String used for metadata and reporting purposes.
`title` (required)
: - Short human-readable title of the rule.
`severity` (required)
: - How critical this rule is.
- Allowed values:
- CRITICAL
- HIGH
- MEDIUM
- LOW
`regex` (required)
: - Golang regular expression used to detect secrets.
`path` (optional)
: - Golang regular expression used to match paths.
`keywords` (optional, recommended)
: - Keywords are used for pre-regex check filtering.
- Rules that contain keywords will perform a quick string compare check to make sure the keyword(s) are in the content being scanned.
- Ideally these values should either be part of the identifier or unique strings specific to the rule's regex.
- It is recommended to define for better performance.
`allow-rules` (optional)
: - Allow rules for a single rule to reduce false positives with known secrets.
- The details are below.
## Allow Rules
If the detected secret is matched with the specified `regex`, then that secret will be skipped and not detected.
The same logic applies for `path`.
`allow-rules` can be defined globally and per each rule. The fields are the same.
``` yaml
rules:
- id: rule1
category: general
title: Generic Rule
severity: HIGH
regex: (?i)(?P<key>(secret))(=|:).{0,5}['"](?P<secret>[0-9a-zA-Z\-_=]{8,64})['"]
allow-rules:
- id: skip-text
description: skip text files
path: .*\.txt
allow-rules:
- id: social-security-number
description: skip social security number
regex: 219-09-9999
```
`id` (required)
: - Unique identifier for this allow rule.
`description` (optional)
: - Short human-readable description of this allow rule.
`regex` (optional)
: - Golang regular expression used to allow detected secrets.
- `regex` or `path` must be specified.
`path` (optional)
: - Golang regular expression used to allow matched paths.
- `regex` or `path` must be specified.
## Enable Rules
Trivy provides plenty of out-of-box rules and allow rules, but you may not need all of them.
In that case, `enable-builin-rules` will be helpful.
If you just need AWS secret detection, you can enable only relevant rules as shown below.
It specifies AWS-related rule IDs in `enable-builin-rules`.
All other rules are disabled, so the scanning will be much faster.
We would strongly recommend using this option if you don't need all rules.
You can see a full list of [built-in rule IDs][builtin] and [built-in allow rule IDs][builtin-allow].
``` yaml
enable-builtin-rules:
- aws-access-key-id
- aws-account-id
- aws-secret-access-key
```
## Disable Rules
Trivy offers built-in rules and allow rules, but you may want to disable some of them.
For example, you don't use Slack, so Slack doesn't have to be scanned.
You can specify the Slack rule IDs, `slack-access-token` and `slack-web-hook` in `disable-rules` so that those rules will be disabled for less false positives.
You should specify either `enable-builin-rules` or `disable-rules`.
If they both are specified, `disable-rules` takes precedence.
In case `github-pat` is specified in `enable-builin-rules` and `disable-rules`, it will be disabled.
In addition, there are some allow rules.
Markdown files are ignored by default, but you may want to scan markdown files as well.
You can disable the allow rule by adding `markdown` to `disable-allow-rules`.
You can see a full list of [built-in rule IDs][builtin] and [built-in allow rule IDs][builtin-allow].
``` yaml
disable-rules:
- slack-access-token
- slack-web-hook
disable-allow-rules:
- markdown
```
[builtin]: https://github.com/aquasecurity/trivy/blob/main/pkg/fanal/secret/builtin-rules.go
[builtin-allow]: https://github.com/aquasecurity/trivy/blob/main/pkg/fanal/secret/builtin-allow-rules.go
[examples]: ./examples.md

View File

@@ -0,0 +1,98 @@
# Examples
Also see [quick start][quick-start].
## Skip Directories
Trivy traversals directories and scans all files except those matching the built-in allow rules by default.
If your have a lot of files in your container image or project, the scanning takes time.
To make it faster, you can skip traversal in the specific directory.
Also, it would be helpful if your project contains secrets and certificates for testing.
``` shell
$ trivy image --skip-dirs /var/lib --skip-dirs /var/log YOUR_IMAGE
```
``` shell
$ trivy fs --skip-dirs ./my-test-dir --skip-dirs ./my-testing-cert/ /path/to/your_project
```
`--skip-fles` also works similarly.
## Filter by severity
Use `--severity` option.
``` shell
$ trivy fs --severity CRITICAL ./
app/secret.sh (secrets)
=======================
Total: 1 (CRITICAL: 1)
+----------+-------------------+----------+---------+--------------------------------+
| CATEGORY | DESCRIPTION | SEVERITY | LINE NO | MATCH |
+----------+-------------------+----------+---------+--------------------------------+
| AWS | AWS Access Key ID | CRITICAL | 10 | export AWS_ACCESS_KEY_ID=***** |
+----------+-------------------+----------+---------+--------------------------------+
```
## Disable secret scanning
If you need vulnerability scanning only, you can disable secret scanning via the `--security-checks` flag.
``` shell
$ trivy image --security-checks vuln alpine:3.15
```
## With configuration file
`trivy-secret.yaml` in the working directory is loaded by default.
``` yaml
$ cat trivy-secret.yaml
rules:
- id: rule1
category: general
title: Generic Rule
severity: HIGH
regex: (?i)(?P<key>(secret))(=|:).{0,5}['"](?P<secret>[0-9a-zA-Z\-_=]{8,64})['"]
allow-rules:
- id: social-security-number
description: skip social security number
regex: 219-09-9999
- id: log-dir
description: skip log directory
path: ^\/var\/log\/
disable-rules:
- slack-access-token
- slack-web-hook
disable-allow-rules:
- markdown
# The following command automatically loads the above configuration.
$ trivy image YOUR_IMAGE
```
Also, you can customize the config file path via `--secret-config`.
``` yaml
$ cat ./secret-config/trivy.yaml
rules:
- id: rule1
category: general
title: Generic Rule
severity: HIGH
regex: (?i)(?P<key>(secret))(=|:).{0,5}['"](?P<secret>[0-9a-zA-Z\-_=]{8,64})['"]
allow-rules:
- id: skip-text
description: skip text files
path: .*\.txt
enable-builtin-rules:
- aws-access-key-id
- aws-account-id
- aws-secret-access-key
disable-allow-rules:
- usr-dirs
# Pass the above config with `--secret-config`.
$ trivy fs --secret-config ./secret-config/trivy.yaml /path/to/your_project
```
[quick-start]: ./scanning.md#quick-start

View File

@@ -0,0 +1,126 @@
# Secret Scanning
Trivy scans any container image, filesystem and git repository to detect exposed secrets like passwords, api keys, and tokens.
Secret scanning is enabled by default.
Trivy will scan every plaintext file, according to builtin rules or configuration. There are plenty of builtin rules:
- AWS access key
- GCP service account
- GitHub personal access token
- GitLab personal access token
- Slack access token
- etc.
You can see a full list of [built-in rules][builtin] and [built-in allow rules][builtin-allow].
!!! tip
If your secret is not detected properly, please make sure that your file including the secret is not in [the allowed paths][builtin-allow].
You can disable allow rules via [disable-allow-rules][disable-rules].
## Quick start
This section shows how to scan secrets in container image and filesystem. Other subcommands should be the same.
### Container image
Specify an image name.
``` shell
$ trivy image myimage:1.0.0
2022-04-21T18:56:44.099+0300 INFO Detected OS: alpine
2022-04-21T18:56:44.099+0300 INFO Detecting Alpine vulnerabilities...
2022-04-21T18:56:44.101+0300 INFO Number of language-specific files: 0
myimage:1.0.0 (alpine 3.15.0)
=============================
Total: 6 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 2)
+--------------+------------------+----------+-------------------+---------------+---------------------------------------+
| LIBRARY | VULNERABILITY ID | SEVERITY | INSTALLED VERSION | FIXED VERSION | TITLE |
+--------------+------------------+----------+-------------------+---------------+---------------------------------------+
| busybox | CVE-2022-28391 | CRITICAL | 1.34.1-r3 | 1.34.1-r5 | CVE-2022-28391 affecting |
| | | | | | package busybox 1.35.0 |
| | | | | | -->avd.aquasec.com/nvd/cve-2022-28391 |
+--------------+------------------| |-------------------+---------------+---------------------------------------+
| ssl_client | CVE-2022-28391 | | 1.34.1-r3 | 1.34.1-r5 | CVE-2022-28391 affecting |
| | | | | | package busybox 1.35.0 |
| | | | | | -->avd.aquasec.com/nvd/cve-2022-28391 |
+--------------+------------------+----------+-------------------+---------------+---------------------------------------+
app/secret.sh (secrets)
=======================
Total: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 0, CRITICAL: 1)
+----------+-------------------+----------+---------+--------------------------------+
| CATEGORY | DESCRIPTION | SEVERITY | LINE NO | MATCH |
+----------+-------------------+----------+---------+--------------------------------+
| AWS | AWS Access Key ID | CRITICAL | 10 | export AWS_ACCESS_KEY_ID=***** |
+----------+-------------------+----------+---------+--------------------------------+
```
!!! tip
Trivy tries to detect a base image and skip those layers for secret scanning.
A base image usually contains a lot of files and makes secret scanning much slower.
If a secret is not detected properly, you can see base layers with the `--debug` flag.
### Filesystem
``` shell
$ trivy fs /path/to/your_project
...(snip)...
certs/key.pem (secrets)
========================
Total: 1 (UNKNOWN: 0, LOW: 0, MEDIUM: 0, HIGH: 1, CRITICAL: 0)
+----------------------+------------------------+----------+---------+---------------------------------+
| CATEGORY | DESCRIPTION | SEVERITY | LINE NO | MATCH |
+----------------------+------------------------+----------+---------+---------------------------------+
| AsymmetricPrivateKey | Asymmetric Private Key | HIGH | 1 | -----BEGIN RSA PRIVATE KEY----- |
+----------------------+------------------------+----------+---------+---------------------------------+
```
!!! tip
Your project may have some secrets for testing. You can skip them with `--skip-dirs` or `--skip-files`.
We would recommend specifying these options so that the secret scanning can be faster if those files don't need to be scanned.
Also, you can specify paths to be allowed in a configuration file. See the detail [here][configuration].
## Configuration
Trivy has a set of builtin rules for secret scanning, which can be extended or modified by a configuration file.
## Recommendation
We would recommend specifying `--skip-dirs` for faster secret scanning.
In container image scanning, Trivy walks the file tree rooted `/` and scans all the files other than [built-in allowed paths][builtin-allow].
It will take a while if your image contains a lot of files even though Trivy tries to avoid scanning layers from a base image.
If you want to make scanning faster, `--skip-dirs` and `--skip-files` helps so that Trivy will skip scanning those files and directories.
The usage examples are [here][examples].
`allow-rules` is also helpful. See the [allow-rules][allow-rules] section.
In addition, all the built-in rules are enabled by default, so it takes some time to scan all of them.
If you don't need all those rules, you can use `enable-builtin-rules` or `disable-rules` in the configuration file.
You should use `enable-builin-rules` if you need only AWS secret detection, for example.
All rules are disabled except for the ones you specify, so it runs very fast.
On the other hand, you should use `disable-rules` if you just want to disable some built-in rules.
See the [enable-rules][enable-rules] and [disable-rules][disable-rules] sections for the detail.
If you don't need secret scanning, you can disable it via the `--security-checks` flag.
```shell
$ trivy image --security-checks vuln alpine:3.15
```
## Credit
This feature is inspired by [gitleaks][gitleaks].
[builtin]: https://github.com/aquasecurity/trivy/blob/main/pkg/fanal/secret/builtin-rules.go
[builtin-allow]: https://github.com/aquasecurity/trivy/blob/main/pkg/fanal/secret/builtin-allow-rules.go
[configuration]: ./configuration.md
[allow-rules]: ./configuration.md#allow-rules
[enable-rules]: ./configuration.md#enable-rules
[disable-rules]: ./configuration.md#disable-rules
[examples]: ./examples.md
[gitleaks]: https://github.com/zricethezav/gitleaks

View File

@@ -1,41 +1,41 @@
# OS
| OS | Source |
| ---------------| ---------------------------------------- |
| Arch Linux | [Vulnerable Issues][arch] |
| Alpine Linux | [secdb][alpine] |
| Amazon Linux 1 | [Amazon Linux Security Center][amazon1] |
| Amazon Linux 2 | [Amazon Linux Security Center][amazon2] |
| Debian | [Security Bug Tracker][debian-tracker] |
| | [OVAL][debian-oval] |
| Ubuntu | [Ubuntu CVE Tracker][ubuntu] |
| RHEL/CentOS | [OVAL][rhel-oval] |
| | [Security Data][rhel-api] |
| AlmaLinux | [AlmaLinux Product Errata][alma] |
| Rocky Linux | [Rocky Linux UpdateInfo][rocky] |
| Oracle Linux | [OVAL][oracle] |
| CBL-Mariner | [OVAL][mariner] |
| OpenSUSE/SLES | [CVRF][suse] |
| Photon OS | [Photon Security Advisory][photon] |
| OS | Source |
|--------------------|---------------------------------------------|
| Arch Linux | [Vulnerable Issues][arch] |
| Alpine Linux | [secdb][alpine] |
| Amazon Linux | [Amazon Linux Security Center][amazon] |
| Debian | [Security Bug Tracker][debian-tracker] |
| | [OVAL][debian-oval] |
| Ubuntu | [Ubuntu CVE Tracker][ubuntu] |
| RHEL/CentOS | [OVAL][rhel-oval] |
| | [Security Data][rhel-api] |
| AlmaLinux | [AlmaLinux Product Errata][alma] |
| Rocky Linux | [Rocky Linux UpdateInfo][rocky] |
| Oracle Linux | [OVAL][oracle] |
| CBL-Mariner | [OVAL][mariner] |
| OpenSUSE/SLES | [CVRF][suse] |
| Photon OS | [Photon Security Advisory][photon] |
# Programming Language
| Language | Source | Commercial Use | Delay[^1]|
| ---------------------------- | ----------------------------------------------------|:---------------:|:--------:|
| PHP | [PHP Security Advisories Database][php] | ✅ | - |
| | [GitHub Advisory Database (Composer)][php-ghsa] | ✅ | - |
| Python | [GitHub Advisory Database (pip)][python-ghsa] | ✅ | - |
| | [Open Source Vulnerabilities (PyPI)][python-osv] | ✅ | - |
| Ruby | [Ruby Advisory Database][ruby] | ✅ | - |
| | [GitHub Advisory Database (RubyGems)][ruby-ghsa] | ✅ | - |
| Node.js | [Ecosystem Security Working Group][nodejs] | ✅ | - |
| | [GitHub Advisory Database (npm)][nodejs-ghsa] | ✅ | - |
| Java | [GitLab Advisories Community][gitlab] | ✅ | 1 month |
| | [GitHub Advisory Database (Maven)][java-ghsa] | ✅ | - |
| Go | [GitLab Advisories Community][gitlab] | ✅ | 1 month |
| | [The Go Vulnerability Database][go] | ✅ | - |
| Rust | [Open Source Vulnerabilities (crates.io)][rust-osv] | ✅ | - |
| .NET | [GitHub Advisory Database (NuGet)][dotnet-ghsa] | ✅ | - |
| Language | Source | Commercial Use | Delay[^1]|
|----------|-----------------------------------------------------|:---------------:|:--------:|
| PHP | [PHP Security Advisories Database][php] | ✅ | - |
| | [GitHub Advisory Database (Composer)][php-ghsa] | ✅ | - |
| Python | [GitHub Advisory Database (pip)][python-ghsa] | ✅ | - |
| | [Open Source Vulnerabilities (PyPI)][python-osv] | ✅ | - |
| Ruby | [Ruby Advisory Database][ruby] | ✅ | - |
| | [GitHub Advisory Database (RubyGems)][ruby-ghsa] | ✅ | - |
| Node.js | [Ecosystem Security Working Group][nodejs] | ✅ | - |
| | [GitHub Advisory Database (npm)][nodejs-ghsa] | ✅ | - |
| Java | [GitLab Advisories Community][gitlab] | ✅ | 1 month |
| | [GitHub Advisory Database (Maven)][java-ghsa] | ✅ | - |
| Go | [GitLab Advisories Community][gitlab] | ✅ | 1 month |
| | [The Go Vulnerability Database][go] | ✅ | - |
| Rust | [Open Source Vulnerabilities (crates.io)][rust-osv] | ✅ | - |
| .NET | [GitHub Advisory Database (NuGet)][dotnet-ghsa] | ✅ | - |
| C/C++ | [GitLab Advisories Community][gitlab] | ✅ | 1 month |
[^1]: Intentional delay between vulnerability disclosure and registration in the DB
@@ -45,10 +45,19 @@
| --------------------------------|------------|
| National Vulnerability Database | [NVD][nvd] |
# Data source selection
Trivy **only** consumes security advisories from the sources listed in the following tables.
As for packages installed from OS package managers (`dpkg`, `yum`, `apk`, etc.), Trivy uses the advisory database from the appropriate **OS vendor**.
For example: for a python package installed from `yum` (Amazon linux), Trivy will only get advisories from [ALAS][amazon2]. But for a python package installed from another source (e.g. `pip`), Trivy will get advisories from the `GitLab` and `GitHub` databases.
This advisory selection is essential to avoid getting false positives because OS vendors usually backport upstream fixes, and the fixed version can be different from the upstream fixed version.
The severity is from the selected data source. If the data source does not provide severity, it falls back to NVD, and if NVD does not have severity, it will be UNKNOWN.
[arch]: https://security.archlinux.org/
[alpine]: https://secdb.alpinelinux.org/
[amazon1]: https://alas.aws.amazon.com/
[amazon2]: https://alas.aws.amazon.com/alas2.html
[amazon]: https://alas.aws.amazon.com/
[debian-tracker]: https://security-tracker.debian.org/tracker/
[debian-oval]: https://www.debian.org/security/oval/
[ubuntu]: https://ubuntu.com/security/cve

View File

@@ -2,26 +2,31 @@
`Trivy` automatically detects the following files in the container and scans vulnerabilities in the application dependencies.
| Language | File | Image[^7] | Rootfs[^8] | Filesystem[^9] | Repository[^10] |Dev dependencies |
|----------|--------------------------|:---------:|:----------:|:--------------:|:--------------:|-----------------|
| Ruby | Gemfile.lock | - | - | ✅ | ✅ | included |
| | gemspec | ✅ | ✅ | - | - | included |
| Python | Pipfile.lock | - | - | ✅ | ✅ | excluded |
| | poetry.lock | - | - | ✅ | ✅ | included |
| | requirements.txt | - | - | ✅ | ✅ | included |
| | egg package[^1] | ✅ | ✅ | - | - | excluded |
| | wheel package[^2] | ✅ | ✅ | - | - | excluded |
| PHP | composer.lock | ✅ | ✅ | ✅ | ✅ | excluded |
| Node.js | package-lock.json | - | - | ✅ | ✅ | excluded |
| | yarn.lock | - | - | ✅ | ✅ | included |
| | package.json | | | - | - | excluded |
| .NET | packages.lock.json | | | | | included |
| | packages.config | ✅ | ✅ | ✅ | ✅ | excluded |
| Java | JAR/WAR/PAR/EAR[^3][^4] | | | - | - | included |
| | pom.xml[^5] | - | - | ✅ | ✅ | excluded |
| Go | Binaries built by Go[^6] | | | - | - | excluded |
| | go.sum | - | - | ✅ | ✅ | included |
| Rust | Cargo.lock | | | ✅ | ✅ | included |
| Language | File | Image[^8] | Rootfs[^9] | Filesystem[^10] | Repository[^11] | Dev dependencies |
| -------- |--------------------------------------------------------------------------------------------| :-------: | :--------: | :-------------: | :-------------: | ---------------- |
| Ruby | Gemfile.lock | - | - | ✅ | ✅ | included |
| | gemspec | | ✅ | - | - | included |
| Python | Pipfile.lock | - | - | ✅ | ✅ | excluded |
| | poetry.lock | - | - | ✅ | ✅ | included |
| | requirements.txt | - | - | ✅ | ✅ | included |
| | egg package[^1] | | ✅ | - | - | excluded |
| | wheel package[^2] | | ✅ | - | - | excluded |
| PHP | composer.lock | | ✅ | ✅ | ✅ | excluded |
| Node.js | package-lock.json | - | - | ✅ | ✅ | excluded |
| | yarn.lock | - | - | ✅ | ✅ | included |
| | pnpm-lock.yaml | - | - | | | excluded |
| | package.json | | | - | - | excluded |
| .NET | packages.lock.json | ✅ | ✅ | ✅ | ✅ | included |
| | packages.config | | | | | excluded |
| | .deps.json | | | ✅ | ✅ | excluded |
| Java | JAR/WAR/PAR/EAR[^3][^4] | | | - | - | included |
| | pom.xml[^5] | - | - | ✅ | ✅ | excluded |
| | *gradle.lockfile | - | - | ✅ | ✅ | excluded |
| Go | Binaries built by Go[^6] | ✅ | ✅ | - | - | excluded |
| | go.mod[^7] | - | - | ✅ | ✅ | included |
| Rust | Cargo.lock | ✅ | ✅ | ✅ | ✅ | included |
| | Binaries built with [cargo-auditable](https://github.com/rust-secure-code/cargo-auditable) | ✅ | ✅ | - | - | excluded
| C/C++ | conan.lock[^12] | - | - | ✅ | ✅ | excluded |
The path of these files does not matter.
@@ -33,7 +38,9 @@ Example: [Dockerfile](https://github.com/aquasecurity/trivy-ci-test/blob/main/Do
[^4]: It requires Internet access
[^5]: It requires Internet access when the POM doesn't exist in your local repository
[^6]: UPX-compressed binaries don't work
[^7]: ✅ means "enabled" and `-` means "disabled" in the image scanning
[^8]: ✅ means "enabled" and `-` means "disabled" in the rootfs scanning
[^9]: ✅ means "enabled" and `-` means "disabled" in the filesystem scanning
[^10]: ✅ means "enabled" and `-` means "disabled" in the git repository scanning
[^7]: If smaller than go 1.17, go.sum is also required
[^8]: ✅ means "enabled" and `-` means "disabled" in the image scanning
[^9]: ✅ means "enabled" and `-` means "disabled" in the rootfs scanning
[^10]: ✅ means "enabled" and `-` means "disabled" in the filesystem scanning
[^11]: ✅ means "enabled" and `-` means "disabled" in the git repository scanning
[^12]: To scan a filename other than the default filename(`conan.lock`) use [file-patterns](../examples/others.md#file-patterns)

View File

@@ -4,15 +4,15 @@ The unfixed/unfixable vulnerabilities mean that the patch has not yet been provi
| OS | Supported Versions | Target Packages | Detection of unfixed vulnerabilities |
| -------------------------------- |-------------------------------------------| ----------------------------- | :----------------------------------: |
| Alpine Linux | 2.2 - 2.7, 3.0 - 3.15, edge | Installed by apk | NO |
| Red Hat Universal Base Image[^1] | 7, 8 | Installed by yum/rpm | YES |
| Alpine Linux | 2.2 - 2.7, 3.0 - 3.16, edge | Installed by apk | NO |
| Red Hat Universal Base Image[^1] | 7, 8, 9 | Installed by yum/rpm | YES |
| Red Hat Enterprise Linux | 6, 7, 8 | Installed by yum/rpm | YES |
| CentOS | 6, 7, 8 | Installed by yum/rpm | YES |
| AlmaLinux | 8 | Installed by yum/rpm | NO |
| Rocky Linux | 8 | Installed by yum/rpm | NO |
| Oracle Linux | 5, 6, 7, 8 | Installed by yum/rpm | NO |
| CBL-Mariner | 1.0, 2.0 | Installed by yum/rpm | YES |
| Amazon Linux | 1, 2 | Installed by yum/rpm | NO |
| Amazon Linux | 1, 2, 2022 | Installed by yum/rpm | NO |
| openSUSE Leap | 42, 15 | Installed by zypper/rpm | NO |
| SUSE Enterprise Linux | 11, 12, 15 | Installed by zypper/rpm | NO |
| Photon OS | 1.0, 2.0, 3.0, 4.0 | Installed by tdnf/yum/rpm | NO |

View File

@@ -3,6 +3,7 @@
## Container Runtime
- [Docker Engine](https://docs.docker.com/engine/)
- [Podman](../../advanced/container/podman.md)
- [containerd](../../advanced/container/containerd.md)
## Container Registry
- [Docker Registry HTTP API V2](https://docs.docker.com/registry/spec/api/)

View File

@@ -6,26 +6,53 @@ The following table provides an outline of the features Trivy offers.
| Version | Container image | Virtual machine | Distroless | Multi-arch | Unfixed support |
|---------|:---------------:|:---------------:|:----------:|:------------:|:---------------:|
| 1.0 | ✔ | ✔ | | amd64, arm64 | ✔ |
| 2.0 | ✔ | ✔[^1] | | amd64, arm64 | ✔ |
[^1]: It is supposed to work, but we've not tested it yet.
| 1.0 | ✔ | ✔ | | amd64, arm64 | ✔ |
| 2.0 | ✔ | | | amd64, arm64 | ✔ |
### Examples
```
$ trivy image cblmariner.azurecr.io/base/core:1.0
2022-01-31T15:02:27.754+0200 INFO Detected OS: cbl-mariner
2022-01-31T15:02:27.754+0200 INFO Detecting CBL-Mariner vulnerabilities...
2022-01-31T15:02:27.757+0200 INFO Number of language-specific files: 0
=== "image"
```
➜ trivy image mcr.microsoft.com/cbl-mariner/base/core:2.0
2022-07-27T14:48:20.355+0600 INFO Detected OS: cbl-mariner
2022-07-27T14:48:20.355+0600 INFO Detecting CBL-Mariner vulnerabilities...
2022-07-27T14:48:20.356+0600 INFO Number of language-specific files: 0
mcr.microsoft.com/cbl-mariner/base/core:2.0 (cbl-mariner 2.0.20220527)
Total: 33 (UNKNOWN: 0, LOW: 0, MEDIUM: 15, HIGH: 13, CRITICAL: 5)
```
cblmariner.azurecr.io/base/core:1.0 (cbl-mariner 1.0.20220122)
==============================================================
Total: 14 (UNKNOWN: 0, LOW: 0, MEDIUM: 5, HIGH: 4, CRITICAL: 5)
```
=== "fs"
```
➜ docker run -it --rm --entrypoint bin/bash mcr.microsoft.com/cbl-mariner/base/core:2.0
root [ / ]# tdnf -y install ca-certificates
...
root [ / ]# rpm -ivh https://github.com/aquasecurity/trivy/releases/download/v0.30.4/trivy_0.30.4_Linux-64bit.rpm
...
root [ / ]# trivy fs /
2022-07-27T09:30:06.815Z INFO Need to update DB
2022-07-27T09:30:06.815Z INFO DB Repository: ghcr.io/aquasecurity/trivy-db
2022-07-27T09:30:06.815Z INFO Downloading DB...
33.25 MiB / 33.25 MiB [------------------------------] 100.00% 4.20 MiB p/s 8.1s
2022-07-27T09:30:21.756Z INFO Vulnerability scanning is enabled
2022-07-27T09:30:21.756Z INFO Secret scanning is enabled
2022-07-27T09:30:21.756Z INFO If your scanning is slow, please try '--security-checks vuln' to disable secret scanning
2022-07-27T09:30:21.756Z INFO Please see also https://aquasecurity.github.io/trivy/v0.30.4/docs/secret/scanning/#recommendation for faster secret detection
2022-07-27T09:30:22.205Z INFO Detected OS: cbl-mariner
2022-07-27T09:30:22.205Z INFO Detecting CBL-Mariner vulnerabilities...
2022-07-27T09:30:22.205Z INFO Number of language-specific files: 0
40ba9a55397c (cbl-mariner 2.0.20220527)
Total: 33 (UNKNOWN: 0, LOW: 0, MEDIUM: 15, HIGH: 13, CRITICAL: 5)
```
### Data source
See [here][source].
[mariner]: https://github.com/microsoft/CBL-Mariner
[source]: detection/data-source.md
[source]: detection/data-source.md

View File

@@ -33,10 +33,12 @@ $ trivy --cache-dir /tmp/trivy/ image python:3.4-alpine3.9
Trivy supports local filesystem and Redis as the cache backend. This option is useful especially for client/server mode.
Two options:
- `fs`
- the cache path can be specified by `--cache-dir`
- `redis://`
- `redis://[HOST]:[PORT]`
- TTL can be configured via `--cache-ttl`
```
$ trivy server --cache-backend redis://localhost:6379

View File

@@ -122,6 +122,9 @@ $ cat .trivyignore
# Accept the risk
CVE-2018-14618
# Accept the risk until 2023-01-01
CVE-2019-14697 exp:2023-01-01
# No impact in our settings
CVE-2019-1543

Some files were not shown because too many files have changed in this diff Show More