You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: CHANGELOG.md
+18-1Lines changed: 18 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -5,7 +5,24 @@ All notable changes to this project will be documented in this file.
5
5
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
6
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
8
-
## [Unreleased]
8
+
## [0.9.7.5] - 2026-06-10
9
+
10
+
### Added
11
+
12
+
-**Universal Confirmation & Password Fallback**: The PAM module now forces an interactive prompt (`<Enter>`) to neutralize silent privilege escalation for sensitive services (like `sudo`). Users can seamlessly bypass face authentication by typing their password at this prompt instead. Configurable via `require_confirmation` and `confirmation_exempt_services`.
13
+
-**Proximity Wake Lock**: Added `always_wake_on_presence_detected` option to force wake on detection. Screen wake now requires presence detection in addition to confidence threshold.
14
+
-**Background Worker**: Offloaded proximity sensor initialization to a background worker.
15
+
16
+
### Fixed
17
+
18
+
-**Memory Leaks**: Prevented memory leaks in subprocess execution by properly duplicating and freeing argument strings.
19
+
-**Process Tracking**: Initialized pid variable to -1 to ensure safe process state tracking.
20
+
-**Code Quality**: Applied C++17 best practices and resolved IDE and cppcheck warnings.
21
+
-**Testing**: Added coverage for config parsing, camera device failures, and auth engine detection pipelines.
22
+
23
+
### Docs
24
+
25
+
-**Security**: Updated THREAT_MODEL_AND_RISK_ASSESSMENT for interactive confirmation, D-Bus screen-state synchronization, and automated wake/unlock vulnerabilities.
Copy file name to clipboardExpand all lines: README.md
+3-2Lines changed: 3 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -34,6 +34,7 @@ Since open-sourcing, I've put effort into making it hardware-agnostic and well-d
34
34
-**Enhanced Enrollment**: HDR capture when supported, frame averaging for all cameras.
35
35
-**Proximity Sensor Integration**: Native support for I2C HID human presence sensors (e.g., ITE8353) to detect human presence, optimize authentication, and reduce idle processing.
36
36
-**Zero-Interaction Login**: Automatically wakes your displays and logs you in the moment you sit down, then automatically locks the OS when you walk away. (See [Threat Model](docs/THREAT_MODEL_AND_RISK_ASSESSMENT.md) for related security considerations, including walk-by unlocks and physical coercion).
37
+
-**Universal Confirmation & Password Fallback**: Prevent silent privilege escalation via active user intent confirmation (`<Enter>`) for sensitive PAM actions like `sudo` or `su`, with an instant bypass for legacy passwords.
37
38
-**Multi-Embedding Support**: Store multiple face embeddings per user for different lighting (`linuxcampam list`, `train --new`).
38
39
-**PAM Integration**: Standard PAM module for Debian/Ubuntu.
39
40
-**Security First**: [Threat Model & Risk Assessment](docs/THREAT_MODEL_AND_RISK_ASSESSMENT.md) included.
@@ -230,8 +231,8 @@ Shows the version of both the CLI client and the running daemon service.
-**lockout_attempts**: Number of failed attempts before temporary lockout.
165
167
-**lockout_duration_sec**: Duration of lockout in seconds (default 300s = 5 minutes).
168
+
-**require_confirmation**: If `true` (default), blocks silent privilege escalation by requiring you to press `<Enter>` to invoke the camera, or type a password to seamlessly bypass face authentication altogether.
169
+
-**confirmation_exempt_services**: A comma-separated list of PAM services that bypass the confirmation prompt. These are typically explicit login events where the camera should activate instantly to avoid user fatigue.
Copy file name to clipboardExpand all lines: docs/THREAT_MODEL_AND_RISK_ASSESSMENT.md
+10Lines changed: 10 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -112,6 +112,15 @@ We use the STRIDE framework to analyze potential threats to the authentication p
112
112
***Threat 3 (Amplified Spoofing Window):** Automated wake and unlock constantly polls when presence is detected. An attacker can repeatedly present high-resolution masks or photos at their leisure while the user is away, increasing the window for brute-forcing the neural network.
113
113
***Mitigation:** This is actively mitigated by the daemon's existing brute-force protection (per-user lockout mechanism). After a configurable number of failed recognition attempts, the system enforces a strict cooldown period, neutralizing rapid spoofing attempts. Furthermore, IR liveness checks severely degrade the success rate of presentation attacks.
***Threat:** A malicious background script attempts to silently escalate privileges via `pkexec` or `sudo`. If the authorized user happens to be sitting in front of the computer, the camera passively authenticates the request without the user's knowledge or active intent, inadvertently granting `root` access to the malware.
118
+
***Mitigation:**
119
+
***Universal Confirmation:** The `require_confirmation` configuration (enabled by default) forces the PAM module to display an interactive prompt requiring the user to physically press `<Enter>` to confirm their intent *before* engaging the camera. This actively neutralizes silent escalation attacks for all non-exempt PAM services.
120
+
***Seamless Password Bypass:** The confirmation prompt now captures keystrokes (`"Press <Enter> for face auth, or type password:"`). If a user inputs a password, the module immediately aborts face authentication and passes the password securely (`PAM_AUTHTOK`) to the next module in the PAM stack (e.g., `pam_unix.so`). This avoids double-prompting while providing an instant opt-out for environments where users temporarily prefer passwords.
121
+
***Service Exemptions:** To prevent user fatigue, explicitly intentional authentication services (e.g., login managers like `gdm-password`, screen lockers like `swaylock`) are exempted from this confirmation prompt via the `confirmation_exempt_services` list.
122
+
***Residual Risk:** Fully mitigated by default. Administrators who manually add `sudo` or `polkit-1` to the exemption list actively assume this risk.
123
+
115
124
## 4. Risk Assessment Matrix
116
125
117
126
### 4.1 Methodology
@@ -145,6 +154,7 @@ Overall Risk is calculated by combining **Likelihood** (Low, Medium, High) and *
145
154
|**Zero-Interaction**| Physical Coercion (Forced Unlock) | Low | Critical |**Medium**| Accepted Risk | Inherent to all biometrics (including fingerprints). Falls under organizational Risk Appetite; if unacceptable, disable LinuxCamPAM entirely. |
146
155
|**Zero-Interaction**| Unintended Unlock (Walk-By after Lock) | Medium | High |**High**| No | User explicitly locks but remains in FOV. Disable zero-interaction unlock if at risk. |
147
156
|**Zero-Interaction**| Amplified Spoofing Window | Medium | High |**Medium**| Yes | Polling increases attack window, but is effectively neutralized by existing auth lockouts and IR liveness checks. |
157
+
|**Zero-Interaction**| Silent Privilege Escalation | Medium | Critical |**High**| Yes |`require_confirmation` blocks all unexpected services. Does not apply to exempt login managers. |
0 commit comments