Table Of Contents

Security audit

Executive summary

This audit was done by scanning Slips with the free open-source tools: Trivy and Bearer, and fixing the reported issues.

The main problems fixed by this audit were the web interface DB switch endpoint, unsafe command/path/SQL/HTML handling reported by Bearer, permissive directory permissions, and old dependencies in the Docker image.

The web interface issue was the highest impact one. webinterface/app.py used to start Flask on 0.0.0.0 using the configured web port, which is 55000 in config/slips.yaml. It also exposed /db/<new_port> as a state-changing GET endpoint without authentication or CSRF protection. This was fixed by binding the web interface to localhost, changing the DB switch to a CSRF-protected POST, and validating the requested Redis port.

The dependency fixes were handled in the Docker image and requirements files. Further dependency security patches will be handled automatically using Dependabot, for example: #1939, #1917, #1798, and #1772.

Scope

The scope of this audit is:

  • Containers and Docker build files

  • Dependencies installed through apt, Python, and Go

  • Default configuration values

  • The codebase paths reported by Bearer

  • The web interface, core Slips code, and detection modules

Methodology and used tools

We used the following open source tools:

  • Trivy to scan the Docker image and dependencies

  • Bearer to scan the source code for security issues

After the scans, the findings were checked manually. The table below includes only the fixed issues. Findings that are still waiting for upstream dependency fixes are not listed here.

Findings

Full table sorted by severity (Critical first), with the CVE column converted to CVE/CWE.

CVE/CWE

Severity

Finding

Component

Status

- CWE-352
- CWE-306
- CWE-862

Critical

- Unauthenticated Redis DB switching.
- The web interface allowed a state-changing GET request to switch the connected Redis DB.

- webinterface/app.py
- static/app.js
- templates/app.html
- webinterface/utils.py

Fixed by:
- using a CSRF-protected POST
- checking the requested Redis port
- returning JSON instead of redirecting from a GET request

- CWE-1327

Critical

- Web interface exposed on all interfaces.
- Flask was listening on 0.0.0.0 on the configured web port, 55000.

- webinterface/app.py
- config/slips.yaml

Fixed by binding Flask to 127.0.0.1.

- CWE-319

Critical

Insecure HTTP connections reported by Bearer.

- http_analyzer/http_analyzer.py
- common/slips_utils.py

Fixed by switching supported lookups to HTTPS.

- CWE-78
- CWE-88

Critical

Command execution paths used scanner-reported input without enough validation.

- modules/arp_poisoner
- modules/blocking
- modules/ip_info
- modules/iris
- modules/leak_detector
- modules/p2p_trust
- slips/main.py
- slips_files/common
- slips_files/core

Fixed by validating:
- IPs
- ports
- paths
- interfaces
- packet filters
- command arguments

- CWE-89
- CWE-943

Critical

Dynamic SQL identifiers and values were built from external data in the SQLite wrappers reported by Bearer.

- persistence/fides_sqlite_db.py
- abstracts/isqlite.py
- sqlite_db/database.py

Fixed by:
- validating table and column identifiers
- using parameterized values where needed

- CVE-2020-29652
- CVE-2021-3121
- CVE-2021-33194
- CVE-2021-38561
- CVE-2021-4239
- CVE-2021-43565
- CVE-2022-23492
- CVE-2022-27191
- CVE-2022-27664
- CVE-2022-28131
- CVE-2022-2879
- CVE-2022-2880
- CVE-2022-29804
- CVE-2022-30580
- CVE-2022-30630
- CVE-2022-30631
- CVE-2022-30632
- CVE-2022-30633
- CVE-2022-30634
- CVE-2022-30635
- CVE-2022-32149
- CVE-2022-32189
- CVE-2022-41715
- CVE-2022-41716
- CVE-2022-41720
- CVE-2022-41722
- CVE-2022-41723
- CVE-2022-41724
- CVE-2022-41725
- CVE-2022-44797
- CVE-2023-24534
- CVE-2023-24536
- CVE-2023-24537
- CVE-2023-24538
- CVE-2023-24539
- CVE-2023-24540
- CVE-2023-29400
- CVE-2023-29403
- CVE-2023-39325
- CVE-2023-39533
- CVE-2023-40583
- CVE-2023-45283
- CVE-2023-45287
- CVE-2023-45288
- CVE-2024-24790
- CVE-2024-34156
- CVE-2024-38365
- CVE-2024-45337
- CVE-2025-22869
- CVE-2025-47907
- CVE-2025-58183
- CVE-2025-61726
- CVE-2025-61728
- CVE-2025-61729
- CVE-2025-68121
- CVE-2026-25679
- CVE-2026-32280
- CVE-2026-32281
- CVE-2026-32283
- CVE-2026-33811
- CVE-2026-33814
- CVE-2026-39820
- CVE-2026-39836
- CVE-2026-42499

Critical

- Old Go runtime and Go modules in the p2p4slips binary left Trivy-reported CVEs in the final image.
- This included fixed CVEs in Go stdlib and third-party Go dependencies.

- docker/Dockerfile
- p2p4slips/p2p4slips

Fixed by:
- building p2p4slips with Go 1.26.3
- copying the hardened binary into the final image

- CVE-2022-21698
- CVE-2022-23492
- CVE-2022-27191
- CVE-2022-27664
- CVE-2022-2879
- CVE-2022-2880
- CVE-2022-32149
- CVE-2022-41715
- CVE-2022-41716
- CVE-2022-41720
- CVE-2022-41722
- CVE-2022-41723
- CVE-2022-41724
- CVE-2022-41725
- CVE-2022-44797
- CVE-2023-24534
- CVE-2023-24536
- CVE-2023-24537
- CVE-2023-24538
- CVE-2023-24539
- CVE-2023-24540
- CVE-2023-29400
- CVE-2023-29403
- CVE-2023-39325
- CVE-2023-39533
- CVE-2023-40583
- CVE-2023-45283
- CVE-2023-45287
- CVE-2023-45288
- CVE-2024-24790
- CVE-2024-34156
- CVE-2024-38365
- CVE-2024-45337
- CVE-2025-22869
- CVE-2025-47907
- CVE-2025-58183
- CVE-2025-61726
- CVE-2025-61728
- CVE-2025-61729
- CVE-2025-68121
- CVE-2026-25679
- CVE-2026-32280
- CVE-2026-32281
- CVE-2026-32283
- CVE-2026-33811
- CVE-2026-33814
- CVE-2026-39820
- CVE-2026-39836
- CVE-2026-42499

Critical

The old copied Iris binary path in the image, modules/irisModule, carried Trivy-reported Go CVEs.

- docker/Dockerfile
- iris/iris

Fixed by:
- rebuilding Iris in a dedicated stage
- copying it into the active iris/iris path instead of shipping the stale duplicate binary

- CWE-79

High

Dynamic HTML insertion could render untrusted data as HTML in the web interface.

static/app.js

Fixed by replacing innerHTML with DOM node creation and text nodes.

- CWE-276
- CWE-732

High

Permissive file and directory permissions.

- feeds_update_manager/feeds_update_manager.py
- slips/main.py

Fixed by using:
- 0700 for downloaded TI files
- 01777 for the shared lock directory instead of plain world-writable permissions

- CWE-22
- CWE-73

High

User-supplied config file path was accepted without normalizing it through Slips path validation.

helpers/checker.py

Fixed by validating the config path after checking that it exists.

- CVE-2026-0994
- CVE-2026-42215
- CVE-2026-42284
- CVE-2026-44243
- CVE-2026-44244
- CVE-2026-44431
- CVE-2026-44432

High

Python dependencies had fixed Trivy findings in:
- GitPython
- urllib3
- protobuf

- install/requirements.txt
- light/requirements.txt

Fixed by upgrading:
- GitPython to 3.1.50
- urllib3 to 2.7.0
- protobuf to 5.29.6

- CVE-2024-35870
- CVE-2024-53179
- CVE-2024-56692
- CVE-2025-37899
- CVE-2025-38118

High

- The Docker image kept build-only packages in the final image.
- These packages triggered linux-libc-dev CVEs.

docker/Dockerfile

Fixed by:
- splitting build stages
- purging build dependencies from the final image

Notes

  • Bearer and Trivy reported some false positives. We investigated and discarded them. Example of the FPs that are not an issue in Slips context: when the reported path is

    • not reachable by untrusted users

    • is only used with local Slips-controlled data

    • or is a p2p related path that is already constrained by Slips P2P trust models.

  • Data received and used by P2P, Fides, and Iris is intentionally not sanitized. Slips relies on its local trust model there.

  • Some vulnerabilities are not disclosed here because the upstream maintainers of the affected dependencies have not released fixed versions yet. We are monitoring them and will update Slips once fixed versions are available.

How AI was used here

  • brainstorming, checking best practice, comparing available tools.

  • debugging and fixing of unit and integration tests.

  • suggesting mitigations for some of the reported CVEs and CWEs. e.g the multi-stage build in docker

  • The following vulnerabilities were fixed by AI:

    • CVE-2024-35870

    • CWE-78 and CWE-88 (sanitization of command execution paths of all modules and core code.)

  • Polishing and formatting this report.

CVEs fixed by the AI were reviewed and tested manually by a human :)