From ee4e92057ad6f5832f1ae648bb9fce1aeded48ed Mon Sep 17 00:00:00 2001 From: Xor290 Date: Wed, 11 Mar 2026 20:39:44 +0100 Subject: [PATCH] chore: add security --- .github/workflows/api-security.yml | 122 +++++++++++++++++------------ .github/workflows/sonar.yml | 53 ++++++------- 2 files changed, 96 insertions(+), 79 deletions(-) diff --git a/.github/workflows/api-security.yml b/.github/workflows/api-security.yml index 07ca9f2c..caa48fce 100644 --- a/.github/workflows/api-security.yml +++ b/.github/workflows/api-security.yml @@ -1,69 +1,87 @@ -# This workflow uses actions that are not certified by GitHub. -# They are provided by a third-party and are governed by -# separate terms of service, privacy policy, and support -# documentation. +name: API Security Scan -# APIsec addresses the critical need to secure APIs before they reach production. -# APIsec provides the industry’s only automated and continuous API testing platform that uncovers security vulnerabilities and logic flaws in APIs. -# Clients rely on APIsec to evaluate every update and release, ensuring that no APIs go to production with vulnerabilities. - -# How to Get Started with APIsec.ai -# 1. Schedule a demo at https://www.apisec.ai/request-a-demo . -# -# 2. Register your account at https://cloud.apisec.ai/#/signup . -# -# 3. Register your API . See the video (https://www.youtube.com/watch?v=MK3Xo9Dbvac) to get up and running with APIsec quickly. -# -# 4. Get GitHub Actions scan attributes from APIsec Project -> Configurations -> Integrations -> CI-CD -> GitHub Actions -# -# apisec-run-scan -# -# This action triggers the on-demand scans for projects registered in APIsec. -# If your GitHub account allows code scanning alerts, you can then upload the sarif file generated by this action to show the scan findings. -# Else you can view the scan results from the project home page in APIsec Platform. -# The link to view the scan results is also displayed on the console on successful completion of action. - -# This is a starter workflow to help you get started with APIsec-Scan Actions - -name: APIsec - -# Controls when the workflow will run on: - # Triggers the workflow on push or pull request events but only for the "main" branch - # Customize trigger events based on your DevSecOps processes. push: - branches: ["main"] + branches: [main] + paths: + - "backend/**" pull_request: - branches: ["main"] + branches: [main] + paths: + - "backend/**" schedule: - - cron: "38 15 * * 1" - - # Allows you to run this workflow manually from the Actions tab + - cron: "0 6 * * 1" # Lundi 6h00 UTC workflow_dispatch: permissions: contents: read + security-events: write jobs: - Trigger_APIsec_scan: - permissions: - security-events: write # for github/codeql-action/upload-sarif to upload SARIF results - actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status + govulncheck: + name: Go Vulnerability Check (CVE) runs-on: ubuntu-latest steps: - - name: APIsec scan - uses: apisec-inc/apisec-run-scan@025432089674a28ba8fb55f8ab06c10215e772ea + - uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 with: - # The APIsec username with which the scans will be executed - apisec-username: ${{ secrets.apisec_username }} - # The Password of the APIsec user with which the scans will be executed - apisec-password: ${{ secrets.apisec_password}} - # The name of the project for security scan - apisec-project: "VAmPI" - # The name of the sarif format result file The file is written only if this property is provided. - sarif-result-file: "apisec-results.sarif" - - name: Import results + go-version: "1.24.4" + cache-dependency-path: backend/gestion/go.sum + + - name: Install govulncheck + run: go install golang.org/x/vuln/cmd/govulncheck@latest + + - name: Run govulncheck + working-directory: backend/gestion + run: govulncheck ./... + + trivy: + name: Trivy - Dependency & Code Scan + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Trivy scan (filesystem) + uses: aquasecurity/trivy-action@0.28.0 + with: + scan-type: fs + scan-ref: backend/gestion + format: sarif + output: trivy-results.sarif + severity: CRITICAL,HIGH,MEDIUM + exit-code: "1" + + - name: Upload Trivy SARIF + if: always() uses: github/codeql-action/upload-sarif@v3 with: - sarif_file: ./apisec-results.sarif + sarif_file: trivy-results.sarif + + gosec: + name: Gosec - Security Hotspots + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + + - name: Setup Go + uses: actions/setup-go@v5 + with: + go-version: "1.24.4" + cache-dependency-path: backend/gestion/go.sum + + - name: Run gosec + uses: securego/gosec@master + with: + args: -fmt sarif -out gosec-results.sarif -exclude-dir=vendor ./... + working-directory: backend/gestion + + - name: Upload gosec SARIF + if: always() + uses: github/codeql-action/upload-sarif@v3 + with: + sarif_file: backend/gestion/gosec-results.sarif diff --git a/.github/workflows/sonar.yml b/.github/workflows/sonar.yml index 0fba2300..2b2576dd 100644 --- a/.github/workflows/sonar.yml +++ b/.github/workflows/sonar.yml @@ -3,30 +3,28 @@ # separate terms of service, privacy policy, and support # documentation. -# This workflow helps you trigger a SonarCloud analysis of your code and populates +# This workflow helps you trigger a SonarQube analysis of your code and populates # GitHub Code Scanning alerts with the vulnerabilities found. -# Free for open source project. +# (this feature is available starting from SonarQube 9.7, Developer Edition and above) -# 1. Login to SonarCloud.io using your GitHub account +# 1. Make sure you add a valid GitHub configuration to your SonarQube (Administration > DevOps platforms > GitHub) -# 2. Import your project on SonarCloud -# * Add your GitHub organization first, then add your repository as a new project. -# * Please note that many languages are eligible for automatic analysis, -# which means that the analysis will start automatically without the need to set up GitHub Actions. -# * This behavior can be changed in Administration > Analysis Method. +# 2. Import your project on SonarQube +# * Add your repository as a new project by clicking "Create project" from your homepage. # -# 3. Follow the SonarCloud in-product tutorial -# * a. Copy/paste the Project Key and the Organization Key into the args parameter below -# (You'll find this information in SonarCloud. Click on "Information" at the bottom left) +# 3. Select GitHub Actions as your CI and follow the tutorial +# * a. Generate a new token and add it to your GitHub repository's secrets using the name SONAR_TOKEN +# (On SonarQube, click on your avatar on top-right > My account > Security or ask your administrator) # -# * b. Generate a new token and add it to your Github repository's secrets using the name SONAR_TOKEN -# (On SonarCloud, click on your avatar on top-right > My account > Security -# or go directly to https://sonarcloud.io/account/security/) +# * b. Copy/paste your SonarQube host URL to your GitHub repository's secrets using the name SONAR_HOST_URL +# +# * c. Copy/paste the project Key into the args parameter below +# (You'll find this information in SonarQube by following the tutorial or by clicking on Project Information at the top-right of your project's homepage) -# Feel free to take a look at our documentation (https://docs.sonarcloud.io/getting-started/github/) -# or reach out to our community forum if you need some help (https://community.sonarsource.com/c/help/sc/9) +# Feel free to take a look at our documentation (https://docs.sonarqube.org/latest/analysis/github-integration/) +# or reach out to our community forum if you need some help (https://community.sonarsource.com/c/sq/10) -name: SonarCloud analysis +name: SonarQube analysis on: push: @@ -36,32 +34,33 @@ on: workflow_dispatch: permissions: - pull-requests: read # allows SonarCloud to decorate PRs with analysis results + pull-requests: read # allows SonarQube to decorate PRs with analysis results jobs: Analysis: runs-on: ubuntu-latest steps: - - name: Analyze with SonarCloud + - name: Analyze with SonarQube # You can pin the exact commit or the version. - # uses: SonarSource/sonarcloud-github-action@v2.2.0 - uses: SonarSource/sonarcloud-github-action@4006f663ecaf1f8093e8e4abb9227f6041f52216 + # uses: SonarSource/sonarqube-scan-action@v1.1.0 + uses: SonarSource/sonarqube-scan-action@7295e71c9583053f5bf40e9d4068a0c974603ec8 env: - SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} # Generate a token on Sonarcloud.io, add it to the secrets of this repo with the name SONAR_TOKEN (Settings > Secrets > Actions > add new repository secret) + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} # Needed to get PR information + SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }} # Generate a token on SonarQube, add it to the secrets of this repo with the name SONAR_TOKEN (Settings > Secrets > Actions > add new repository secret) + SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }} # add the URL of your instance to the secrets of this repo with the name SONAR_HOST_URL (Settings > Secrets > Actions > add new repository secret) with: - # Additional arguments for the SonarScanner CLI + # Additional arguments for the sonarcloud scanner args: - # Unique keys of your project and organization. You can find them in SonarCloud > Information (bottom-left menu) + # Unique key of your project. You can find it in SonarQube > [my project] > Project Information (top-right menu) # mandatory -Dsonar.projectKey= - -Dsonar.organization= # Comma-separated paths to directories containing main source files. #-Dsonar.sources= # optional, default is project base directory + # When you need the analysis to take place in a directory other than the one from which it was launched + #-Dsonar.projectBaseDir= # optional, default is . # Comma-separated paths to directories containing test source files. #-Dsonar.tests= # optional. For more info about Code Coverage, please refer to https://docs.sonarcloud.io/enriching/test-coverage/overview/ # Adds more detail to both client and server-side analysis logs, activating DEBUG mode for the scanner, and adding client-side environment variables and system properties to the server-side log of analysis report processing. #-Dsonar.verbose= # optional, default is false - # When you need the analysis to take place in a directory other than the one from which it was launched, default is . - projectBaseDir: .