Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
73 changes: 73 additions & 0 deletions .github/workflows/security-scan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
name: Security Scan

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

jobs:
security-tests:
runs-on: ubuntu-latest

steps:
- name: Check out code
uses: actions/checkout@v4

- name: Set up JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'

- name: Build Docker image
run: |
docker build -t myapp:latest .

- name: Run Trivy vulnerability scanner
uses: aquasecurity/trivy-action@master
with:
image-ref: 'myapp:latest'
vuln-type: 'os,library'
format: 'table'
exit-code: '0'
severity: 'CRITICAL,HIGH'

- name: Install Semgrep
run: |
pip install semgrep

- name: Run Semgrep SAST scan
run: |
semgrep --config p/security-audit --json . || true

- name: Create Docker network
run: |
docker network create zap-network

- name: Start application
run: |
docker run -d --network zap-network --name myapp -p 8080:8080 myapp:latest
sleep 15
docker ps
docker logs myapp || true

- name: Wait for application to be ready
run: |
timeout 60 bash -c 'until curl -f http://localhost:8080; do sleep 2; done' || true

- name: Prepare workspace for ZAP
run: |
sudo chmod -R 777 ${{ github.workspace }} || true

- name: Run OWASP ZAP Baseline Scan
run: |
docker run --rm --network zap-network -v ${{ github.workspace }}:/zap/wrk/:rw -w /zap/wrk -u zap zaproxy/zap-stable zap-baseline.py -t http://myapp:8080 -r zap_report.html || true

- name: Upload ZAP report
uses: actions/upload-artifact@v4
if: always()
with:
name: zap-report
path: zap_report.html
if-no-files-found: warn
7 changes: 5 additions & 2 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# ---- Build Stage ----
# Use Maven base image from the Docker Hub
FROM maven:3.8.3-openjdk-11-slim AS build
FROM --platform=linux/amd64 maven:3.8.3-eclipse-temurin-11 AS build

# Set the current working directory inside the image
WORKDIR /app
Expand All @@ -13,10 +13,13 @@ COPY pom.xml /app
RUN mvn clean install -DskipTests

# ---- Deploy Stage ----
FROM openjdk:11-jdk-slim
FROM --platform=linux/amd64 eclipse-temurin:11-jre

# Copy the built JAR from the build stage
COPY --from=build /app/target/thymeleaf-0.0.1-SNAPSHOT.jar /app.jar

# Expose port 8080
EXPOSE 8080

# Run the application
ENTRYPOINT ["java", "-jar", "/app.jar"]
27 changes: 27 additions & 0 deletions PR.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
## Zadanie 3

Zgodnie z wymaganiami zadania 3 z README, utworzono workflow GitHub Actions (`.github/workflows/security-scan.yml`), który automatycznie wykonuje testy bezpieczeństwa przy każdym pushu do `main` i przy tworzeniu Pull Request.

Semgrep nie wykrył żadnych problemów bezpieczeństwa w kodzie źródłowym, natomiast Trivy znalazł 40 podatności w zależnościach Java. Raport z pełnymi wynikami skanowania jest dostępny pod [linkiem](https://github.com/jpocwiar/TBO4/actions/runs/20194926665).



## Zadanie 4

Zgodnie z wymaganiami zadania 4 z README, rozszerzono workflow o automatyczne uruchomienie aplikacji i skanowanie ZAP. Ponieważ napotkano trudne do rozwiązania błędy z architekturą (exec format error), zdecydowano się na pełną automatyzację w workflow GitHub Actions, gdzie środowisko działa poprawnie.


### Wyniki skanowania ZAP (DAST):

![Wynik skanowania ZAP](img/zap.png)


Skanowanie ZAP nie wykryło nowych krytycznych podatności, natomiast zidentyfikowało kilka ostrzeżeń (głównie dotyczących brakujących nagłówków bezpieczeństwa, braku ochrony przed CSRF oraz innych ustawień konfiguracyjnych). Wszystkie te problemy mają charakter średni lub niski i związane są głównie z konfiguracją aplikacji.



## Porównanie wyników SAST/SCA vs DAST


Każde z narzędzi wykrywa inne typy problemów: Trivy znalazł podatności w bibliotekach, Semgrep nie wykrył nic w kodzie, natomiast ZAP wskazał głównie braki w konfiguracji bezpieczeństwa aplikacji, jak brak nagłówków czy ochrony przed CSRF. Narzędzia te uzupełniają się i razem dają pełniejszy obraz bezpieczeństwa.

Binary file added img/zap.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.