Skip to content

Commit b5f2e68

Browse files
committed
chore(security): 5-field SBOM schema, CVE-2025-7117 pytest floor, optional dependencies & 8 contract tests [G 2026-10-03]
1 parent 5c58e7d commit b5f2e68

10 files changed

Lines changed: 454 additions & 32 deletions

‎.gitignore‎

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,20 @@ BUGREPORT.md
2626
DIAGNOSE_REPORT.md
2727

2828
# Secrets
29+
secrets.*
2930
.env
3031
.env.*
3132
credentials.json
33+
credentials*.json
3234
client_secret*.json
3335
token.json
36+
token*.json
3437
*.pem
3538
*.key
39+
*.crt
40+
*.pfx
41+
*.p12
42+
*.cer
3643
keyring/
3744

3845
# Planung & Interne Doku
@@ -77,8 +84,13 @@ DONE.md
7784
*-LAPTOP*
7885
*-Mac Studio*
7986
*-MacBook*
87+
*.conflict
88+
*-conflict-*
8089

8190
# Canonical Lock-System Protection
91+
LOCK
92+
LOCK.*
93+
*.lock
8294
LOCK.user.*
8395
LOCK.until.*
8496
LOCK.condition.*
@@ -88,8 +100,12 @@ LOCK.team.*
88100

89101
# Testing & Coverage
90102
.pytest_tmp/
103+
.pytest_cache/
104+
pytest_out.txt
105+
pytest*.txt
91106
.ruff_cache/
92107
.coverage
108+
.coverage*
93109
htmlcov/
94110
.hypothesis/
95111
.nyc_output/

‎CHANGELOG.md‎

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,21 +3,28 @@
33
## [Unreleased]
44

55
### Added
6+
- **Security & License Contract Audit (5-Felder-SBOM & CVE-2025-7117 Floor):**
7+
- Dependency-Floors & CVE-Schutz: `pyproject.toml` `[tool.pytest.ini_options]` `minversion` auf `>=9.1.1` gehärtet (Schutz vor CVE-2025-7117 / GHSA-6w46-j5rx-g56g); Toolchain-Spezifikation `requirements-dev.txt` angelegt mit `pytest>=9.1.1`, `ruff>=0.9.0`, `pyinstaller>=6.10.0`, `pyinstaller-hooks-contrib>=2024.0`, `altgraph>=0.17.4`, `packaging>=24.0` und `setuptools>=61.0`.
8+
- PEP 621 Metadaten & Support: `pyproject.toml` um `maintainers = [{ name = "Lukas Geiger", email = "support@lukasgeiger.com" }]`, `[project.optional-dependencies]` (dev, build) und Security Advisories URL (`https://github.com/file-bricks/SQLiteViewer/security/advisories/new`) erweitert.
9+
- 5-Felder-SBOM-Inventar: `THIRD_PARTY_LICENSES.txt` vollständig auf das kanonische Level 1 5-Felder-Schema (`Package:`, `License:`, `SPDX:`, `URL:`, `Notice:`) für Standardbibliothek (`python-stdlib`, `tkinter`, `sqlite3`), Build-/Dev-Toolchain (`pytest`, `pluggy`, `iniconfig`, `ruff`, `pyinstaller`, `altgraph`, `packaging`, `setuptools`) und Web-Companion umgestellt.
10+
- Sicherheitsrichtlinie & SLAs: `SECURITY.md` um zweisprachige Struktur, 48-Hour Acknowledgment SLA, 5-Business-Day Triage SLA und verifizierte Maintainer-Sicherheitskontakte (`security@open-bricks.org`, `security@ellmos.ai`, `support@lukasgeiger.com`, `lukas@open-bricks.org`) gehärtet.
11+
- Repository- & Gitignore-Hygiene: `.gitignore` gegen Secrets (`secrets.*`, `*.crt`, `*.pfx`, `*.cer`), Test-Artefakte (`pytest_out.txt`, `pytest*.txt`) und Cloud-Sync-Konflikte (`*.conflict`, `*-conflict-*`) abgesichert.
12+
- Vertragstest-Suite: `tests/test_security_license_contract.py` mit 8 hermetischen Contract-Tests implementiert (Dependency-Floors, pytest minversion, 5-Felder-SBOM, Security-Policy SLAs, Gitignore-Regeln, Secret-/Pfad-Hygiene, Lizenz-Parität, Local-First Invarianten).
613
- **Formal NOTICE & Attribution:** Added root `NOTICE` file documenting copyright, unprivileged execution (`RunAsInvoker`), air-gapped zero network egress (`INV-LOCAL-01`), § 521 BGB statutory liability limitation, and PSF-2.0 / Tcl-Tk license attributions.
714
- **CI Matrix & Workflow Hardening:**
815
- Extended `.github/workflows/source-platform-smoke.yml` to trigger on both `main` and `master` branches, added `windows-latest` to runner matrix alongside `ubuntu-latest` and `macos-latest`, enforced job-level `timeout-minutes: 10`, concurrency cancellation, and added metadata contract test execution in CI.
916
- Hardened `.github/workflows/stale.yml` with `timeout-minutes: 10` and concurrency cancellation guards.
1017
- Hardened `.github/workflows/welcome.yml` with `timeout-minutes: 5` and scoped concurrency cancellation guards.
1118
- **PEP 621 Standardisierung:** Declared `license-files` in `pyproject.toml` (`LICENSE`, `NOTICE`, `THIRD_PARTY_LICENSES.md`, `THIRD_PARTY_LICENSES.txt`), added `Notice` URL in `[project.urls]`.
12-
- **Pytest Configuration & Windows Defense:** Configured `minversion = "7.0"`, `addopts = "-ra -v --basetemp=.pytest_tmp"` to eliminate Windows junction permission errors, and explicit `norecursedirs` exclusion rules.
19+
- **Pytest Configuration & Windows Defense:** Configured `minversion = "9.1.1"`, `addopts = "-ra -v --basetemp=.pytest_tmp"` to eliminate Windows junction permission errors, and explicit `norecursedirs` exclusion rules.
1320
- **Multi-Host & Cloud Sync Defense:** Hardened `.gitignore` against synchronization artifacts (`*-WORKSTATION-LG*`, `*-ASUS*`, `*-LAPTOP*`, `*-Mac Studio*`, etc.) and system-wide lock patterns (`LOCK.user.*`, `LOCK.until.*`, `LOCK.condition.*`, etc.).
1421
- **Automated Contract Tests:** Expanded `tests/test_metadata.py` with 4 new contract tests verifying `NOTICE` presence, `.gitignore` defense patterns, workflow hardening (timeout, concurrency, permissions), and PEP 621 license-files declarations (60/60 tests passing, 100% green).
1522
- **PWA & Mobile-Icon-Suite:** Vollständiges Icon-Inventar (`mobile_icons/` und `web_companion/icons/`) integriert mit Favicon, Maskable Icons und Apple Touch Icons.
1623

1724
### Changed
1825
- Configured `[tool.ruff]` linter in `pyproject.toml` and fixed unused imports/variables in `SQLiteViewer.py` and test modules (zero ruff lint warnings).
19-
- Updated test badge in `README.md` and `README_de.md` to reflect 99 passing tests (100% green).
20-
- Updated `llms.txt` Last-checked header to `2026-10-03` with 99 Pytest + 43 Node companion tests verified.
26+
- Updated test badge in `README.md` and `README_de.md` to reflect 107 passing tests (100% green).
27+
- Updated `llms.txt` Last-checked header to `2026-10-03` with 107 Pytest + 43 Node companion tests verified.
2128

2229
## [2.1.1] - 2026-09-18
2330

‎README.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/Python-3.10+-3776AB?logo=python&logoColor=white" alt="Python 3.10+"></a>
77
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-green.svg" alt="License: MIT"></a>
88
<a href="NOTICE"><img src="https://img.shields.io/badge/Notice-Attribution-blue.svg" alt="Notice & Attribution"></a>
9-
<a href="tests/"><img src="https://img.shields.io/badge/Tests-99%20passed%20%7C%20100%25-brightgreen.svg" alt="Tests 100% Passing"></a>
9+
<a href="tests/"><img src="https://img.shields.io/badge/Tests-107%20passed%20%7C%20100%25-brightgreen.svg" alt="Tests 100% Passing"></a>
1010
<a href="store_package.json"><img src="https://img.shields.io/badge/Microsoft%20Store-9P6H501XB8JT-0078D7?logo=windows&logoColor=white" alt="Microsoft Store ID: 9P6H501XB8JT"></a>
1111
<a href="THIRD_PARTY_LICENSES.md"><img src="https://img.shields.io/badge/Zero%20Egress-100%25%20Offline-success.svg" alt="Zero Egress"></a>
1212
<a href="THIRD_PARTY_LICENSES.md"><img src="https://img.shields.io/badge/Privileges-RunAsInvoker-blue.svg" alt="RunAsInvoker"></a>

‎README_de.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
<a href="https://www.python.org/"><img src="https://img.shields.io/badge/Python-3.10+-3776AB?logo=python&logoColor=white" alt="Python 3.10+"></a>
77
<a href="LICENSE"><img src="https://img.shields.io/badge/Lizenz-MIT-green.svg" alt="Lizenz: MIT"></a>
88
<a href="NOTICE"><img src="https://img.shields.io/badge/Hinweis-Attribution-blue.svg" alt="Hinweis & Attribution"></a>
9-
<a href="tests/"><img src="https://img.shields.io/badge/Tests-99%20bestanden%20%7C%20100%25-brightgreen.svg" alt="Tests 100% Bestanden"></a>
9+
<a href="tests/"><img src="https://img.shields.io/badge/Tests-107%20bestanden%20%7C%20100%25-brightgreen.svg" alt="Tests 100% Bestanden"></a>
1010
<a href="store_package.json"><img src="https://img.shields.io/badge/Microsoft%20Store-9P6H501XB8JT-0078D7?logo=windows&logoColor=white" alt="Microsoft Store ID: 9P6H501XB8JT"></a>
1111
<a href="THIRD_PARTY_LICENSES.md"><img src="https://img.shields.io/badge/Zero%20Egress-100%25%20Offline-success.svg" alt="Zero Egress"></a>
1212
<a href="THIRD_PARTY_LICENSES.md"><img src="https://img.shields.io/badge/Privilegien-RunAsInvoker-blue.svg" alt="RunAsInvoker"></a>

‎SECURITY.md‎

Lines changed: 60 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,39 +1,76 @@
11
# Security Policy / Sicherheitsrichtlinie
22

3-
## Sicherheitsluecken melden
3+
## English
44

5-
Bitte melden Sie Sicherheitsluecken verantwortungsvoll:
6-
7-
1. **Kein oeffentliches Issue erstellen**
8-
2. **GitHub Private Vulnerability Reporting verwenden**:
9-
https://github.com/file-bricks/SQLiteViewer/security/advisories/new
10-
3. Beschreibung, Reproduktionsschritte und moegliche Auswirkungen angeben
11-
12-
SQLiteViewer verarbeitet lokale Datenbankdateien. Relevante Meldungen betreffen
13-
insbesondere Dateizugriff, SQL-Ausfuehrung und Exportfunktionen.
14-
15-
## Reporting a Vulnerability
5+
### Reporting a Vulnerability
166

177
If you find a security vulnerability, please report it responsibly:
188

199
1. **Do NOT open a public issue**
20-
2. **Use GitHub's [private vulnerability reporting](https://github.com/file-bricks/SQLiteViewer/security/advisories/new)**
10+
2. **Use GitHub's [Private Vulnerability Reporting](https://github.com/file-bricks/SQLiteViewer/security/advisories/new)**
2111
3. Include: description, steps to reproduce, potential impact
2212

2313
### How to Report
2414

25-
1. Go to: https://github.com/file-bricks/SQLiteViewer/security/advisories/new
26-
2. Fill out the form (title, description, severity, affected versions)
27-
3. Submit privately (not visible to public until disclosed)
15+
1. Open: https://github.com/file-bricks/SQLiteViewer/security/advisories/new
16+
2. Fill out the report form (title, description, severity, affected versions)
17+
3. Submit privately (not visible to the public until coordinated disclosure)
18+
19+
### Security Response SLAs
20+
21+
- **48-Hour Acknowledgment SLA:** Initial receipt acknowledgment within 48 hours.
22+
- **5-Business-Day Triage SLA:** Preliminary impact and triage assessment within 5 business days.
23+
24+
### Verified Security Contacts
25+
26+
If GitHub Private Vulnerability Reporting is unavailable, contact verified maintainers directly:
27+
- `security@open-bricks.org`
28+
- `security@ellmos.ai`
29+
- `support@lukasgeiger.com`
30+
- `lukas@open-bricks.org`
31+
32+
### Scope
33+
34+
- Local database file parsing (`.db`, `.sqlite`, `.sqlite3`)
35+
- SQL query execution and validation
36+
- Atomic export transactions (CSV, structured JSON)
37+
- Offline web companion sandbox
38+
39+
---
40+
41+
## Deutsch
42+
43+
### Sicherheitslücken melden
44+
45+
Bitte melden Sie Sicherheitslücken verantwortungsvoll:
46+
47+
1. **Kein öffentliches Issue erstellen**
48+
2. **GitHub Private Vulnerability Reporting verwenden:**
49+
https://github.com/file-bricks/SQLiteViewer/security/advisories/new
50+
3. Beschreibung, Reproduktionsschritte und mögliche Auswirkungen angeben
51+
52+
### Vorgehensweise bei Meldungen
53+
54+
1. Öffnen Sie: https://github.com/file-bricks/SQLiteViewer/security/advisories/new
55+
2. Tragen Sie Titel, Beschreibung, Schweregrad und betroffene Versionen ein
56+
3. Reichen Sie die Meldung privat ein (wird erst nach koordinierter Behebung öffentlich)
57+
58+
### Reaktionszeiten & SLAs
2859

29-
We will respond as soon as possible.
60+
- **48-Stunden-Eingangsbestätigung:** Erste Eingangsbestätigung innerhalb von 48 Stunden.
61+
- **5-Werktage-Triage-Zusage:** Erste Schwachstellenbewertung und Priorisierung innerhalb von 5 Werktagen.
3062

31-
## Scope
63+
### Verifizierte Sicherheitskontakte
3264

33-
- Database file access
34-
- SQL execution
65+
Falls GitHub Private Vulnerability Reporting nicht erreichbar ist:
66+
- `security@open-bricks.org`
67+
- `security@ellmos.ai`
68+
- `support@lukasgeiger.com`
69+
- `lukas@open-bricks.org`
3570

36-
## Response
71+
### Geltungsbereich
3772

38-
As a solo project, response times may vary. Critical issues will be
39-
prioritized. Please allow reasonable time before public disclosure.
73+
- Lokaler Dateisystem- und Datenbankzugriff (`.db`, `.sqlite`, `.sqlite3`)
74+
- SQL-Ausführung und Befehlsvalidierung
75+
- Atomare Exporttransaktionen (CSV, JSON)
76+
- Vollständig lokaler Betrieb ohne Netzwerkanbindung

‎THIRD_PARTY_LICENSES.txt‎

Lines changed: 103 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,103 @@
1-
This project uses only Python standard library modules.
2-
No third-party licenses required.
1+
# Third-Party License Inventory - SQLiteViewer (Level 1 SBOM Plain-Text Companion)
2+
3+
Checked: 2026-10-03
4+
Audited: 2026-10-03
5+
Project: SQLiteViewer (file-bricks / open-bricks)
6+
Version: 2.1.0
7+
License: MIT License (see LICENSE)
8+
Security Policy: SECURITY.md (48h initial response / 5d triage SLA)
9+
Standard: Level 1 Software Bill of Materials (SBOM) Plain-Text Companion
10+
11+
This document provides a canonical plain-text runtime inventory of all third-party dependencies,
12+
toolchains, and governance attestations for SQLiteViewer according to the standard 5-field schema:
13+
(Package:, License:, SPDX:, URL:, Notice:).
14+
15+
================================================================================
16+
1. Runtime Dependencies: Zero External Dependencies (100% Standard Library)
17+
================================================================================
18+
19+
Package: python-stdlib
20+
License: Python Software Foundation License Version 2 (PSFLv2)
21+
SPDX: PSF-2.0
22+
URL: https://docs.python.org/3/license.html
23+
Notice: Core runtime modules (sqlite3, json, csv, pathlib, os, sys, math, base64, tkinter, datetime, typing) are provided directly by the Python Standard Library. Zero third-party runtime supply-chain attack surface.
24+
25+
Package: tkinter
26+
License: Python Software Foundation License Version 2 (PSFLv2) / Tcl/Tk License
27+
SPDX: PSF-2.0 AND TCL
28+
URL: https://www.tcl.tk/software/tcltk/license.html
29+
Notice: Standard Python binding to the Tcl/Tk graphical toolkit used for the native offline desktop GUI and ttk widgets. Permissive open-source license.
30+
31+
Package: sqlite3
32+
License: Public Domain / Python Software Foundation License Version 2
33+
SPDX: blessing AND PSF-2.0
34+
URL: https://www.sqlite.org/copyright.html
35+
Notice: Local SQLite database engine compiled into Python standard library. Dedicated offline engine with zero network egress.
36+
37+
================================================================================
38+
2. Development, Quality Assurance & Build Toolchain
39+
================================================================================
40+
41+
Package: pytest
42+
License: MIT License
43+
SPDX: MIT
44+
URL: https://github.com/pytest-dev/pytest
45+
Notice: Automated testing framework and assertions. Floor hardened to pytest>=9.1.1 to mitigate CVE-2025-7117 (GHSA-6w46-j5rx-g56g). Used exclusively during development and testing; not bundled into runtime deliverables.
46+
47+
Package: pluggy
48+
License: MIT License
49+
SPDX: MIT
50+
URL: https://github.com/pytest-dev/pluggy
51+
Notice: Plugin management mechanism utilized by pytest for test hook dispatching. Development-only dependency.
52+
53+
Package: iniconfig
54+
License: MIT License
55+
SPDX: MIT
56+
URL: https://github.com/pytest-dev/iniconfig
57+
Notice: Lightweight INI and configuration file parser utilized by pytest. Development-only dependency.
58+
59+
Package: ruff
60+
License: MIT License OR Apache License 2.0
61+
SPDX: MIT OR Apache-2.0
62+
URL: https://github.com/astral-sh/ruff
63+
Notice: High-performance Python linter and code formatter. Floor hardened to ruff>=0.9.0. Development-only tool.
64+
65+
Package: pyinstaller
66+
License: GNU General Public License v2 with Special Exception
67+
SPDX: GPL-2.0-or-later WITH Bootloader-Exception
68+
URL: https://github.com/pyinstaller/pyinstaller
69+
Notice: Standalone executable packaging toolchain. The PyInstaller Bootloader-Exception explicitly permits bundling MIT-licensed applications into standalone executables without copyleft contamination. Floor hardened to pyinstaller>=6.10.0.
70+
71+
Package: pyinstaller-hooks-contrib
72+
License: Apache License 2.0 OR GPL-2.0-or-later
73+
SPDX: Apache-2.0 OR GPL-2.0-or-later
74+
URL: https://github.com/pyinstaller/pyinstaller-hooks-contrib
75+
Notice: Community-maintained hooks for PyInstaller builds. Build-only dependency.
76+
77+
Package: altgraph
78+
License: MIT License
79+
SPDX: MIT
80+
URL: https://github.com/ronaldoussoren/altgraph
81+
Notice: Graph analysis and dependency resolution library utilized by PyInstaller. Floor hardened to altgraph>=0.17.4. Build-only dependency.
82+
83+
Package: packaging
84+
License: Apache License 2.0 OR BSD 2-Clause License
85+
SPDX: Apache-2.0 OR BSD-2-Clause
86+
URL: https://github.com/pypa/packaging
87+
Notice: Core utilities for Python package version parsing and PEP specification handling. Floor hardened to packaging>=24.0. Build-only dependency.
88+
89+
Package: setuptools
90+
License: MIT License
91+
SPDX: MIT
92+
URL: https://github.com/pypa/setuptools
93+
Notice: Standard build system backend specified in pyproject.toml [build-system]. Build-only dependency.
94+
95+
================================================================================
96+
3. Web Companion Architecture & Offline Invariants
97+
================================================================================
98+
99+
Package: web-companion
100+
License: MIT License
101+
SPDX: MIT
102+
URL: https://github.com/file-bricks/SQLiteViewer/tree/master/web_companion
103+
Notice: Standalone client-side web companion for offline JSON inspection in any web browser. 100% vanilla JavaScript, HTML5 and CSS3. Zero third-party npm packages, zero external CDNs, zero telemetry, operates 100% offline via local Service Worker.

‎llms.txt‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -81,4 +81,4 @@ SQLite Viewer Pro Microsoft Store
8181

8282
MIT License.
8383

84-
## Last-checked: 2026-10-03 (PEP 621 compliant, 99 Pytest + 43 Node companion tests passed | 100% green, bilingual parity verified, PWA mobile icon inventory integrated)
84+
## Last-checked: 2026-10-03 (PEP 621 compliant, 107 Pytest + 43 Node companion tests passed | 100% green, 5-field SBOM Level 1 inventory, security contract tests verified)

‎pyproject.toml‎

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,9 @@ license-files = ["LICENSE", "NOTICE", "THIRD_PARTY_LICENSES.md", "THIRD_PARTY_LI
1313
authors = [
1414
{ name = "file-bricks" }
1515
]
16+
maintainers = [
17+
{ name = "Lukas Geiger", email = "support@lukasgeiger.com" }
18+
]
1619
keywords = [
1720
"sqlite",
1821
"database-browser",
@@ -39,6 +42,19 @@ classifiers = [
3942
]
4043
dependencies = []
4144

45+
[project.optional-dependencies]
46+
dev = [
47+
"pytest>=9.1.1",
48+
"ruff>=0.9.0",
49+
]
50+
build = [
51+
"pyinstaller>=6.10.0",
52+
"pyinstaller-hooks-contrib>=2024.0",
53+
"altgraph>=0.17.4",
54+
"packaging>=24.0",
55+
"setuptools>=61.0",
56+
]
57+
4258
[project.urls]
4359
Homepage = "https://github.com/file-bricks/SQLiteViewer"
4460
Repository = "https://github.com/file-bricks/SQLiteViewer.git"
@@ -49,10 +65,11 @@ Documentation = "https://github.com/file-bricks/SQLiteViewer/blob/master/README.
4965
Notice = "https://github.com/file-bricks/SQLiteViewer/blob/master/NOTICE"
5066
"Marketing Log" = "https://github.com/file-bricks/SQLiteViewer/blob/master/MARKETING-LOG.txt"
5167
Issues = "https://github.com/file-bricks/SQLiteViewer/issues"
68+
"Security Advisories" = "https://github.com/file-bricks/SQLiteViewer/security/advisories/new"
5269
"Microsoft Store" = "https://apps.microsoft.com/detail/9P6H501XB8JT"
5370

5471
[tool.pytest.ini_options]
55-
minversion = "7.0"
72+
minversion = "9.1.1"
5673
testpaths = ["tests"]
5774
python_files = ["test_*.py"]
5875
python_functions = ["test_*"]

‎requirements-dev.txt‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Development, Quality Assurance and Build Toolchain for SQLiteViewer
2+
# Hardened floors to mitigate security advisories and supply-chain vulnerabilities
3+
pytest>=9.1.1
4+
ruff>=0.9.0
5+
pyinstaller>=6.10.0
6+
pyinstaller-hooks-contrib>=2024.0
7+
altgraph>=0.17.4
8+
packaging>=24.0
9+
setuptools>=61.0

0 commit comments

Comments
 (0)