Skip to content

Commit e20a86e

Browse files
committed
changes to trivy sbom fs for POC with CycloneDX
Signed-off-by: stlef14 <stlef14@users.noreply.github.com>
1 parent b7ddaff commit e20a86e

File tree

1 file changed

+83
-103
lines changed

1 file changed

+83
-103
lines changed

scanners/boostsecurityio/trivy-sbom/module.yaml

Lines changed: 83 additions & 103 deletions
Original file line numberDiff line numberDiff line change
@@ -8,114 +8,94 @@ scan_types:
88

99
config:
1010
support_diff_scan: false
11-
include_files:
12-
# C/C++ https://trivy.dev/v0.61/docs/coverage/language/c/
13-
- conan.lock
14-
# Dart https://trivy.dev/v0.61/docs/coverage/language/dart/
15-
- pubspec.lock
16-
# Dotnet https://trivy.dev/v0.61/docs/coverage/language/dotnet/
17-
- "*.deps.json"
18-
- packages.config
19-
- "*Packages.props"
20-
- packages.lock.json
21-
# Elixir https://trivy.dev/v0.61/docs/coverage/language/elixir/
22-
- mix.lock
23-
# Go https://trivy.dev/v0.61/docs/coverage/language/golang/
24-
- go.mod
25-
# Java https://trivy.dev/v0.61/docs/coverage/language/java/
26-
- "*gradle.lockfile"
27-
- pom.xml
28-
- "*.sbt.lock"
29-
# NodeJs https://trivy.dev/v0.61/docs/coverage/language/nodejs/
30-
- package-lock.json
31-
- yarn.lock
32-
- pnpm-lock.yaml
33-
# Php https://trivy.dev/v0.61/docs/coverage/language/php/
34-
- composer.lock
35-
- installed.json
36-
# Python https://trivy.dev/v0.61/docs/coverage/language/python/
37-
- Pipfile.lock
38-
- requirements.txt
39-
- poetry.lock
40-
- uv.lock
41-
# Ruby https://trivy.dev/v0.61/docs/coverage/language/ruby/
42-
- Gemfile.lock
43-
- .gemspec
44-
# RUST https://trivy.dev/v0.61/docs/coverage/language/rust/
45-
- Cargo.lock
46-
# Swift https://trivy.dev/v0.61/docs/coverage/language/swift/
47-
- Package.resolved
48-
- Podfile.lock
49-
# Julia https://trivy.dev/v0.61/docs/coverage/language/julia/
50-
- Manifest.toml
5111

5212
setup:
53-
- name: Utility scripts
13+
- name: Verify dotnet installed
5414
run: |
55-
mkdir -p $SETUP_PATH/pre-scan-checks/
56-
cp $SETUP_PATH/../../registry/scanners/boostsecurityio/trivy-fs/prescan_checks.sh $SETUP_PATH/pre-scan-checks/trivy
57-
- name: download trivy
58-
environment:
59-
VERSION: 0.67.0
60-
LINUX_X86_64_SHA: 5b10e9bba00a508b0f3bcb98e78f1039f7eee26b57c9266961a415642a9208ab
61-
LINUX_ARM64_SHA: 0f3ac33954dd918cad708bdf06731b4aa8cc14b12e879932b4ceef2f22640a9e
62-
MACOS_X86_64_SHA: ae8a13d8c3abf7f7e7981ac1a5f5ec094d68835f2aac67da102d4ba36e820c3c
63-
MACOS_ARM64_SHA: feea8727b501f654683774fe0f98a9c1a128c7d8bcd7c942a8e6f6d05b33bd4b
64-
run: |
65-
BINARY_URL="https://github.com/aquasecurity/trivy/releases/download/v${VERSION}"
66-
ARCH=$(uname -m)
67-
68-
case "$(uname -sm)" in
69-
"Linux x86_64")
70-
BINARY_URL="${BINARY_URL}/trivy_${VERSION}_Linux-64bit.tar.gz"
71-
SHA="${LINUX_X86_64_SHA} trivy.tgz"
72-
;;
73-
"Linux aarch64")
74-
BINARY_URL="${BINARY_URL}/trivy_${VERSION}_Linux-ARM64.tar.gz"
75-
SHA="${LINUX_ARM64_SHA} trivy.tgz"
76-
;;
77-
"Darwin x86_64")
78-
BINARY_URL="${BINARY_URL}/trivy_${VERSION}_macOS-64bit.tar.gz"
79-
SHA="${MACOS_X86_64_SHA} trivy.tgz"
80-
;;
81-
"Darwin arm64")
82-
BINARY_URL="${BINARY_URL}/trivy_${VERSION}_macOS-ARM64.tar.gz"
83-
SHA="${MACOS_ARM64_SHA} trivy.tgz"
84-
;;
85-
*)
86-
echo "Unsupported machine: ${OPTARG}"
87-
exit 1
88-
;;
89-
esac
90-
91-
curl -o trivy.tgz -fsSL "${BINARY_URL}"
92-
echo "${SHA}" | sha256sum --check
93-
94-
tar --no-same-owner -zxf trivy.tgz trivy
95-
rm trivy.tgz
96-
chmod +x trivy
15+
mkdir -p $SETUP_PATH/scan-tools
16+
if ! dotnet --version ; then
17+
echo "dotnet is not installed, the scanner cannot run."
18+
exit 1
19+
fi
20+
dotnet tool install CycloneDX --version 5.5.0 --tool-path $SETUP_PATH/scan-tools/.dotnet-tools
21+
if [ $? -ne 0 ]; then
22+
echo "Failed to install CycloneDX"
23+
exit 1
24+
fi
25+
if ! "$SETUP_PATH/scan-tools/.dotnet-tools/dotnet-CycloneDX" --version >/dev/null 2>&1; then
26+
echo "CycloneDX did not install or run correctly"
27+
exit 1
28+
fi
9729
9830
steps:
99-
- run: $SETUP_PATH/pre-scan-checks/trivy
10031
- scan:
10132
command:
102-
environment:
103-
NO_COLOR: "true"
104-
TRIVY_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-db:2,ghcr.io/aquasecurity/trivy-db:2
105-
TRIVY_JAVA_DB_REPOSITORY: public.ecr.aws/aquasecurity/trivy-java-db:1,ghcr.io/aquasecurity/trivy-java-db:1
106-
run: >
107-
$SETUP_PATH/trivy fs
108-
--format=cyclonedx
109-
--license-full
110-
--no-progress
111-
--scanners vuln
112-
--cache-dir=/tmp/trivy/
113-
--skip-version-check
114-
. 2>&1
33+
run: |
34+
TEMP_SOLN_FILE="temp"
35+
SCAN_TARGET=$TEMP_SOLN_FILE".sln"
36+
37+
# Find all .csproj files (excluding test directories)
38+
ALL_PROJECTS=$(find . -maxdepth 5 -name "*.csproj" -type f)
39+
40+
if [ -z "$ALL_PROJECTS" ]; then
41+
echo "{}"
42+
exit 0
43+
fi
44+
45+
# Test each project - only include ones that restore successfully
46+
# This filters out template projects or any broken projects
47+
VALID_PROJECTS_FILE=$(mktemp)
48+
49+
while IFS= read -r proj; do
50+
if [ -n "$proj" ] && dotnet restore "$proj" --ignore-failed-sources --no-cache >/dev/null 2>&1; then
51+
echo "$proj" >> "$VALID_PROJECTS_FILE"
52+
fi
53+
done <<EOF
54+
$ALL_PROJECTS
55+
EOF
56+
57+
PROJECT_LIST=$(cat "$VALID_PROJECTS_FILE")
58+
rm -f "$VALID_PROJECTS_FILE"
59+
60+
61+
if [ -z "$PROJECT_LIST" ]; then
62+
echo "No projects found."
63+
exit 1
64+
fi
65+
66+
# Create temporary solution to merge all projects
67+
dotnet new sln -n $TEMP_SOLN_FILE --force >/dev/null 2>&1 || true
68+
69+
# Add all found .csproj files to the solution
70+
echo "$PROJECT_LIST" | while IFS= read -r proj; do
71+
[ -n "$proj" ] && dotnet sln $SCAN_TARGET add "$proj" >/dev/null 2>&1 || true
72+
done
73+
74+
# Restore packages while ignoring errors.
75+
if [ -n "$SCAN_TARGET" ]; then
76+
dotnet restore "$SCAN_TARGET" --ignore-failed-sources --no-cache >/dev/null 2>&1 || true
77+
fi
78+
79+
# Generate SBOM to temporary directory
80+
OUTPUT_DIR="temp_sbom_output"
81+
rm -rf "$OUTPUT_DIR" || true
82+
83+
if [ -n "$SCAN_TARGET" ] && $SETUP_PATH/scan-tools/.dotnet-tools/dotnet-CycloneDX "$SCAN_TARGET" \
84+
--disable-package-restore \
85+
--output "$OUTPUT_DIR" \
86+
--output-format json \
87+
>/dev/null 2>&1; then
88+
89+
if [ -f "$OUTPUT_DIR/bom.json" ]; then
90+
cat "$OUTPUT_DIR/bom.json"
91+
else
92+
echo "SBOM result missing."
93+
exit 1
94+
fi
95+
else
96+
echo "CycloneDX failed to generate SBOM."
97+
exit 1
98+
fi
99+
115100
format: cyclonedx
116-
post-processor:
117-
docker:
118-
image: public.ecr.aws/boostsecurityio/boost-scanner-trivy-sbom:9b693ef@sha256:249ee707158424d8bd333198e1512ca295fe30c6fff2d2b1adff9e8f914b42cb
119-
command: process
120-
environment:
121-
PYTHONIOENCODING: utf-8
101+

0 commit comments

Comments
 (0)