Add agent fingerprinting, client certificate auth, and security audit documentation
Some checks failed
CI / backend (push) Has been cancelled
CI / naming (push) Has been cancelled
CI / gates (push) Has been cancelled
CI / frontend (push) Has been cancelled
CI / lean-build (push) Has been cancelled

This commit adds:
- Database migrations for app_delta fingerprints and client certificates
- Scripts for certificate generation and fingerprint backfilling
- Comprehensive security audit reports and findings tracking
- Implementation documentation for certificate authentication
- Test utilities for certificate renewal and fingerprinting
- GE-ENFORCE collector fix documentation

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
This commit is contained in:
Proudlock
2026-09-15 09:18:12 -04:00
parent 1a7bb9bd34
commit 5cd5332397
32 changed files with 8912 additions and 0 deletions

View File

@@ -0,0 +1,411 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ShopDB Audit - Unvalidated Findings (Hunt Round 4)</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.6;
color: #333;
background: #f5f5f5;
padding: 20px;
}
.container {
max-width: 1200px;
margin: 0 auto;
background: white;
padding: 40px;
box-shadow: 0 2px 8px rgba(0,0,0,0.1);
}
header {
border-bottom: 3px solid #f39c12;
padding-bottom: 20px;
margin-bottom: 30px;
}
h1 {
color: #f39c12;
font-size: 2.5em;
margin-bottom: 10px;
}
h2 {
color: #2c3e50;
font-size: 1.8em;
margin-top: 40px;
margin-bottom: 15px;
padding-bottom: 10px;
border-bottom: 2px solid #ecf0f1;
}
h3 {
color: #34495e;
font-size: 1.4em;
margin-top: 30px;
margin-bottom: 10px;
}
.alert-warning {
background: #fff3cd;
border: 2px solid #ffc107;
border-radius: 8px;
padding: 20px;
margin: 20px 0;
color: #856404;
}
.alert-warning strong {
display: block;
font-size: 1.2em;
margin-bottom: 10px;
}
.category {
background: #fff;
border: 1px solid #ddd;
border-left: 4px solid #f39c12;
padding: 20px;
margin: 20px 0;
border-radius: 4px;
}
.category-header {
font-size: 1.3em;
font-weight: bold;
color: #2c3e50;
margin-bottom: 15px;
}
.finding-list {
list-style: none;
padding: 0;
}
.finding-list li {
padding: 12px;
margin: 8px 0;
background: #f8f9fa;
border-left: 3px solid #95a5a6;
border-radius: 3px;
}
.finding-list li:hover {
background: #e9ecef;
}
.count-badge {
display: inline-block;
background: #f39c12;
color: white;
padding: 4px 12px;
border-radius: 12px;
font-size: 0.85em;
font-weight: bold;
margin-left: 10px;
}
.stats-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
gap: 20px;
margin: 20px 0;
}
.stat-card {
background: #fff4e6;
border: 2px solid #f39c12;
padding: 20px;
border-radius: 8px;
text-align: center;
}
.stat-number {
font-size: 3em;
font-weight: bold;
color: #f39c12;
}
.stat-label {
color: #7f8c8d;
margin-top: 5px;
font-size: 0.9em;
}
table {
width: 100%;
border-collapse: collapse;
margin: 20px 0;
}
th, td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #ddd;
}
th {
background: #f39c12;
color: white;
font-weight: bold;
}
tr:hover {
background: #f5f5f5;
}
.recommendation {
background: #e8f4f8;
border-left: 4px solid #3498db;
padding: 15px 20px;
margin: 15px 0;
border-radius: 4px;
}
.task-name {
font-family: 'Courier New', monospace;
background: #f8f9fa;
padding: 2px 6px;
border-radius: 3px;
font-size: 0.9em;
}
</style>
</head>
<body>
<div class="container">
<header>
<h1>⚠️ Unvalidated Findings - Hunt Round 4</h1>
<p style="color: #7f8c8d; margin-top: 10px;">
Security Audit - September 12, 2026<br>
Budget exhausted before adversarial validation could complete
</p>
</header>
<div class="alert-warning">
<strong>⚠️ IMPORTANT: These findings have NOT been adversarially validated</strong>
<p>These 40 potential vulnerabilities were discovered in Hunt Round 4 but were not validated due to budget exhaustion ($60.42 of $40.00 budget spent). Based on historical validation rates from Rounds 1-3:</p>
<ul style="margin: 10px 0 10px 20px;">
<li><strong>Expected false positive rate: ~80%</strong> (29 of 36 findings rejected in Rounds 1-3)</li>
<li><strong>Estimated real vulnerabilities: 6-8 of these 40</strong></li>
<li><strong>Validation cost: $15-20 additional</strong></li>
</ul>
<p style="margin-top: 10px;"><strong>Recommendation:</strong> Budget for validation round or manually review based on priority.</p>
</div>
<div class="stats-grid">
<div class="stat-card">
<div class="stat-number">40</div>
<div class="stat-label">Unvalidated Findings</div>
</div>
<div class="stat-card">
<div class="stat-number">~8</div>
<div class="stat-label">Estimated Real Vulns</div>
</div>
<div class="stat-card">
<div class="stat-number">80%</div>
<div class="stat-label">Expected False Positive Rate</div>
</div>
<div class="stat-card">
<div class="stat-number">$20</div>
<div class="stat-label">Validation Cost Estimate</div>
</div>
</div>
<h2>Findings by Category</h2>
<div class="category">
<div class="category-header">
📁 File Upload Validation Issues
<span class="count-badge">8 findings</span>
</div>
<ul class="finding-list">
<li><span class="task-name">upload_employees_photo_1</span> - Employee photo upload validation</li>
<li><span class="task-name">upload_geenforce_payload_1</span> - GEEnforce payload upload (3 issues found in this task)</li>
<li><span class="task-name">upload_guides_image_1</span> - Guides image upload validation</li>
<li><span class="task-name">upload_printedparts_file_1</span> - Printed parts file upload validation</li>
<li><span class="task-name">upload_screenshot_magic_bypass_1</span> - Screenshot upload magic byte bypass</li>
<li><span class="task-name">upload_slides_multi_1</span> - Slides multi-file upload validation</li>
<li><span class="task-name">upload_warranty_proof_1</span> - Warranty proof upload validation</li>
<li><span class="task-name">scripts_body_upload_validation_1</span> - Scripts body upload validation</li>
</ul>
<div style="margin-top: 15px; padding: 10px; background: #f8f9fa; border-radius: 4px; font-size: 0.9em; color: #555;">
<strong>Pattern:</strong> Similar to confirmed vuln #1 (Agent Binary Injection). These tasks checked for weak file type validation across various upload endpoints in different plugins.
</div>
</div>
<div class="category">
<div class="category-header">
🚦 Rate Limiting Gaps
<span class="count-badge">7 findings</span>
</div>
<ul class="finding-list">
<li><span class="task-name">ratelimit_apitoken_create_1</span> - API token creation rate limiting</li>
<li><span class="task-name">ratelimit_auth_change_password_1</span> - Password change rate limiting</li>
<li><span class="task-name">ratelimit_guides_image_spam_1</span> - Guides image upload spam protection</li>
<li><span class="task-name">ratelimit_printedparts_file_spam_1</span> - Printed parts file upload spam</li>
<li><span class="task-name">ratelimit_scripts_upload_1</span> - Scripts upload rate limiting</li>
<li><span class="task-name">ratelimit_setup_create_admin_1</span> - Setup admin creation rate limiting</li>
<li><span class="task-name">ratelimit_warranty_proof_spam_1</span> - Warranty proof upload spam</li>
</ul>
<div style="margin-top: 15px; padding: 10px; background: #f8f9fa; border-radius: 4px; font-size: 0.9em; color: #555;">
<strong>Pattern:</strong> Similar to confirmed vuln #5 (Token Refresh Rate Limit Bypass). These tasks checked for missing rate limiting across various authenticated endpoints.
</div>
</div>
<div class="category">
<div class="category-header">
⚡ Race Conditions
<span class="count-badge">6 findings</span>
</div>
<ul class="finding-list">
<li><span class="task-name">endpoints_agentupgrade_race_1</span> - Agent upgrade race condition</li>
<li><span class="task-name">endpoints_script_push_race_1</span> - Script push race condition</li>
<li><span class="task-name">race_computers_collector_1</span> - Computers collector race condition</li>
<li><span class="task-name">race_geenforce_collector_1</span> - GEEnforce collector race condition</li>
<li><span class="task-name">race_machines_collector_1</span> - Machines collector race condition</li>
<li><span class="task-name">race_measuringtools_collector_1</span> - Measuring tools collector race condition</li>
<li><span class="task-name">race_network_collector_1</span> - Network collector race condition (2 issues)</li>
<li><span class="task-name">race_printers_collector_1</span> - Printers collector race condition</li>
</ul>
<div style="margin-top: 15px; padding: 10px; background: #f8f9fa; border-radius: 4px; font-size: 0.9em; color: #555;">
<strong>Pattern:</strong> Similar to confirmed vuln #7 (Event Dedup Race Condition). These tasks checked for TOCTOU issues in other collector plugins and concurrent operations.
</div>
</div>
<div class="category">
<div class="category-header">
🔐 Additional Upload & Validation Issues
<span class="count-badge">3 findings</span>
</div>
<ul class="finding-list">
<li><span class="task-name">application_package_signed_check_1</span> - Application package signature verification</li>
<li><span class="task-name">maplevel_blueprint_upload_1</span> - Map level blueprint upload validation</li>
<li><span class="task-name">models_image_upload_validation_1</span> - Models image upload validation</li>
<li><span class="task-name">settings_branding_logo_upload_1</span> - Settings branding logo upload</li>
</ul>
</div>
<div class="category">
<div class="category-header">
🔑 Token & Session Management
<span class="count-badge">3 findings</span>
</div>
<ul class="finding-list">
<li><span class="task-name">apitoken_no_rotation_1</span> - API token non-rotation (similar to refresh token issue)</li>
<li><span class="task-name">printedparts_kiosk_token_reuse_1</span> - Printed parts kiosk token reuse</li>
<li><span class="task-name">usb_kiosk_token_reuse_1</span> - USB kiosk token reuse</li>
</ul>
<div style="margin-top: 15px; padding: 10px; background: #f8f9fa; border-radius: 4px; font-size: 0.9em; color: #555;">
<strong>Pattern:</strong> Similar to confirmed vuln #4 (Refresh Token Non-Rotation). These tasks checked for non-rotating credentials in other authentication mechanisms.
</div>
</div>
<div class="category">
<div class="category-header">
⏱️ Timing Attacks
<span class="count-badge">2 findings</span>
</div>
<ul class="finding-list">
<li><span class="task-name">collector_managed_token_timing_1</span> - Collector managed token timing attack</li>
<li><span class="task-name">setup_token_timing_1</span> - Setup token timing attack</li>
</ul>
<div style="margin-top: 15px; padding: 10px; background: #f8f9fa; border-radius: 4px; font-size: 0.9em; color: #555;">
<strong>Pattern:</strong> Similar to confirmed vuln #3 (Collector API Key Timing Attack). These tasks checked for non-constant-time comparisons in other authentication paths.
</div>
</div>
<div class="category">
<div class="category-header">
ℹ️ Information Disclosure
<span class="count-badge">1 finding</span>
</div>
<ul class="finding-list">
<li><span class="task-name">info_disclosure_application_exists_1</span> - Application enumeration</li>
</ul>
<p style="margin-top: 10px; font-size: 0.9em; color: #555;">
<strong>Note:</strong> 3 related tasks found zero findings:
<span class="task-name">info_disclosure_asset_exists_1</span>,
<span class="task-name">info_disclosure_script_exists_1</span>,
<span class="task-name">info_disclosure_user_exists_1</span>
</p>
</div>
<div class="category">
<div class="category-header">
🔓 Authentication & Authorization
<span class="count-badge">2 findings</span>
</div>
<ul class="finding-list">
<li><span class="task-name">collector_plugin_scoped_keys_1</span> - Collector plugin-scoped keys auth bypass/misconfiguration</li>
<li><span class="task-name">applications_installer_version_detect_1</span> - Applications installer version detection (0 findings)</li>
</ul>
</div>
<div class="category">
<div class="category-header">
🔍 Zero Findings (Not Vulnerabilities)
<span class="count-badge">1 task</span>
</div>
<ul class="finding-list">
<li><span class="task-name">timing_geenforce_1</span> - GEEnforce timing attack (0 findings - no vuln)</li>
</ul>
</div>
<h2>Validation Approach</h2>
<div class="recommendation">
<h3 style="margin-top: 0;">Option 1: Automated Validation (Recommended)</h3>
<p>Resume the audit with additional budget to complete adversarial validation:</p>
<ul style="margin: 10px 0 10px 20px;">
<li><strong>Cost:</strong> $15-20 additional</li>
<li><strong>Time:</strong> ~30-45 minutes</li>
<li><strong>Expected outcome:</strong> 6-8 confirmed vulnerabilities, 32-34 rejected as false positives</li>
<li><strong>Command:</strong> <code>python audit.py --resume --budget 80</code></li>
</ul>
</div>
<div class="recommendation">
<h3 style="margin-top: 0;">Option 2: Manual Review by Priority</h3>
<p>Review findings manually in priority order:</p>
<ol style="margin: 10px 0 10px 20px;">
<li><strong>High Priority:</strong> File upload validation (8 findings) - Similar to confirmed HIGH severity vuln #1</li>
<li><strong>Medium Priority:</strong> Rate limiting gaps (7 findings) - Similar to confirmed MEDIUM severity vuln #5</li>
<li><strong>Medium Priority:</strong> Token management (3 findings) - Similar to confirmed MEDIUM severity vuln #4</li>
<li><strong>Low Priority:</strong> Race conditions (6 findings) - Similar to confirmed LOW severity vuln #7</li>
<li><strong>Low Priority:</strong> Timing attacks (2 findings), Info disclosure (1 finding)</li>
</ol>
</div>
<div class="recommendation">
<h3 style="margin-top: 0;">Option 3: Accept Risk</h3>
<p>Focus remediation efforts on the 7 confirmed vulnerabilities only. The unvalidated findings can be addressed in future audit cycles. This is reasonable if:</p>
<ul style="margin: 10px 0 10px 20px;">
<li>Budget constraints prevent additional validation</li>
<li>The 7 confirmed vulnerabilities provide sufficient work backlog</li>
<li>Risk tolerance accepts potential false negatives (missing 6-8 real vulnerabilities)</li>
</ul>
</div>
<h2>Raw Data Location</h2>
<p>Complete hunt results available at:</p>
<p style="background: #f8f9fa; padding: 10px; border-radius: 4px; font-family: monospace; font-size: 0.9em;">
C:\Users\270015376\AppData\Local\Temp\audit-tool\results\shopdb-final\hunt\t_fb_*.jsonl
</p>
<footer style="margin-top: 60px; padding-top: 20px; border-top: 2px solid #ecf0f1; color: #7f8c8d; font-size: 0.9em;">
<p><strong>Document Generated:</strong> September 12, 2026 at 15:40 EDT</p>
<p><strong>Audit Status:</strong> Hunt Round 4 complete, Validation pending</p>
<p><strong>Related Reports:</strong> security-audit-report-2026-09-12.html (confirmed findings)</p>
</footer>
</div>
</body>
</html>