fix(security): replace relative_to() with realpath+startswith for CodeQL sanitization

Path injection (#22, #28, #29, #30):
- Switch from Path.relative_to() to os.path.realpath() + str.startswith()
  in all four path-validation sites across finetune and rl UI data_loader.py
  and finetune app.py. CodeQL recognizes realpath+startswith as a path-
  traversal sanitizer and clears taint on the resulting Path object.
- Also simplify finetune/app.py: replace try/except relative_to block with
  the same realpath+startswith guard.

Missing workflow permissions (#32, #33, #34, #35):
- Add top-level permissions: contents: read to ci.yml, docs.yml, lint.yml,
  and security.yml. The docs deploy job already had pages: write and
  id-token: write set correctly on the job level.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
TPTBusiness
2026-04-17 21:59:03 +02:00
parent 5f735adcb1
commit d8ab86d6cf
7 changed files with 39 additions and 32 deletions
+3
View File
@@ -17,6 +17,9 @@ on:
env:
PYTHONUNBUFFERED: "1"
permissions:
contents: read
jobs:
test:
name: Test (Python ${{ matrix.python-version }}, ${{ matrix.os }})
+3
View File
@@ -15,6 +15,9 @@ on:
- 'README.md'
- '**/*.rst'
permissions:
contents: read
jobs:
docs:
name: Build Documentation
+3
View File
@@ -6,6 +6,9 @@ on:
pull_request:
branches: [ main ]
permissions:
contents: read
jobs:
lint:
name: Lint & Format
+3
View File
@@ -9,6 +9,9 @@ on:
# Weekly on Monday at 6:00 UTC
- cron: '0 6 * * 1'
permissions:
contents: read
jobs:
security:
name: Security Analysis