Sicherheitshaertung: Injection-Schutz, atomares Locking, Pfad-Validierung

- load_config blockiert Shell-Operatoren (;|&`) in .env-Werten
- validate_path prueft Sonderzeichen und Path-Traversal in Pfad-Variablen
- validate_config prüft DARKTABLE_BIN-basename und ruft validate_path auf
- Lockdir-Trap erst nach erfolgreicher Lock-Akquisition registriert
  (verhindert dass externer Lockdir bei gescheitertem Lock entfernt wird)
- uninstall.sh nutzt rmdir statt rm -rf fuer Lockdir
- security.bats mit 10 Tests fuer alle Sicherheitsanforderungen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-04-19 19:57:39 +02:00
parent 46664ab3b6
commit 92a5d50082
5 changed files with 192 additions and 15 deletions
+6 -8
View File
@@ -24,17 +24,15 @@ count_synced_files() {
echo "$count"
}
SCRIPT_NAME="$(basename "$0")"
LOCKFILE="/tmp/${SCRIPT_NAME}.lock"
LOCKDIR="$CONFIG_DIR/sync.lock"
TMPFILES=()
if [ -e "$LOCKFILE" ]; then
echo "Script laeuft bereits oder Lockfile loeschen: $LOCKFILE"
# Atomares Locking per mkdir (verhindert Race Condition und Symlink-Attacken)
if ! mkdir "$LOCKDIR" 2>/dev/null; then
echo "Script laeuft bereits oder Lockdir loeschen: $LOCKDIR"
exit 1
fi
touch "$LOCKFILE"
TMPFILES=("$LOCKFILE")
trap 'rm -f "${TMPFILES[@]}"' EXIT
trap 'rm -f "${TMPFILES[@]}"; rmdir "$LOCKDIR" 2>/dev/null || true' EXIT
SHOW_NOTIFY_START_STOP=false
if [[ "${1:-}" == "--with-notify-start-stop" ]]; then