Commit Graph

7 Commits

Author SHA1 Message Date
Proudlock
2ce4fa4e5c Security: Add path traversal protection to plugin operations
Add defense-in-depth validation to prevent path traversal attacks when
enabling/installing plugins via the UI or CLI.

Layer 1 - Input Validation (enable_plugin):
- Validate plugin names with regex ^[a-zA-Z0-9_-]+$
- Reject reserved names (., .., empty string)
- Blocks attempts like ../../../etc/passwd at entry point

Layer 2 - Path Boundary Check (load_manifest):
- Verify resolved manifest path stays within plugins_dir
- Defense in depth even if name validation is bypassed
- Compatible with Python 3.8+ (fallback for < 3.9)

Risk Assessment: LOW
- Requires admin role (already trusted)
- Multiple existing validation layers
- No known exploitation in the wild

Rationale: Defense in depth best practice. Admins are trusted, but input
validation should not rely solely on authorization checks.

Tested:
- Valid names pass (backups, my-plugin, plugin-name)
- Path traversal blocked (../../../etc/passwd)
- Reserved names blocked (..)
- Both validation layers confirmed working

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-09-07 03:01:09 -04:00
Proudlock
62a07ebcdd UX: auto-install plugins when enabling from UI
enable_plugin() now auto-installs available plugins before enabling them.
This fixes the UX issue where clicking Enable on an AVAILABLE plugin would
fail with 'Plugin is not installed'. Now it installs automatically (runs
migrations, seeds permissions) then enables it.

Before: User had to manually install via CLI first
After: Enable button works on AVAILABLE plugins (one-click install+enable)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2026-09-07 02:42:53 -04:00
c674000ccc Show the kiosk label prefix, and let a plugin declare the settings it owns 2026-08-06 18:17:56 -04:00
83a5ce79d9 ADR-013 Phase 2: meta_path import guard (re-review fix) 2026-07-18 21:47:40 -04:00
77ca2e0d2d ADR-013 Phase 2: enforcement + signed shelf + adopt (adversarial-review hardened) 2026-07-18 21:06:38 -04:00
41f5dbf5e0 ADR-013 Phase 0: plugin lifecycle groundwork (validate, apply-profile, dependency fixes) 2026-07-18 18:08:48 -04:00
a9d0dfff4a Initial import: shopdb-flask multi-site asset platform
Flask + Vue rewrite of the classic-ASP shopdb, built as a plugin
framework so sister GE Aerospace sites can adopt it. Product version
0.7.0-pre-0.8.0, plugin contract 0.11.0, 966 backend tests.

Key entry points:
- docs/INSTALL-WINDOWS-IIS.md - tested Windows + IIS install runbook
  (own-site and subpath deployment methods)
- docs/PILOT-DEPLOY.md - production pilot: stand up + import + verify
- docs/IMPORT-API.md - schema-agnostic legacy data import contract
- scripts/site_imports/wjf/ - West Jefferson reference import loader
- docs/adr/ - twelve accepted architecture decision records
2026-07-14 07:58:51 -04:00