coverme-scanner 2.0.0 → 2.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -336,6 +336,22 @@ grep -r "import.*database\|import.*db" src/controllers/ src/routes/
336
336
 
337
337
  Create `.coverme/scan.json` with this structure:
338
338
 
339
+ ### CRITICAL REQUIREMENT
340
+
341
+ **YOU MUST CREATE DETAILED FINDINGS!**
342
+
343
+ The `findings` array is **MANDATORY** and must contain:
344
+ - Full finding objects with ALL fields (not just executiveSummary.topRisks)
345
+ - businessImpact with financial/reputation/legal/operational breakdown
346
+ - proofOfConcept with actual exploit code
347
+ - attackChain with step-by-step exploitation
348
+ - quickFix vs properFix with code examples
349
+ - testing instructions (manual + automated)
350
+ - detection methods (commands + indicators)
351
+ - estimatedEffort (human vs claudeCode with ROI)
352
+
353
+ **DO NOT** create only `executiveSummary.topRisks` - you **MUST** also create full finding objects in the `findings` array!
354
+
339
355
  ### Required Fields
340
356
  - `agentCount`: Always `1` (unified agent)
341
357
  - `scanDuration`: e.g., "8m 30s" or "512s"
@@ -1258,16 +1274,27 @@ Before finishing:
1258
1274
 
1259
1275
  ## REMEMBER
1260
1276
 
1261
- 1. **Silent failures are CRITICAL** - They hide production bugs in payments, auth, data
1262
- 2. **Read actual code** - Don't guess, read the files
1263
- 3. **Check git history** - Secrets may have been removed but still exposed
1264
- 4. **Think like an attacker** - How would you exploit this?
1265
- 5. **Be specific** - File:line, code snippets, attack chains
1266
- 6. **DREAD + Attack Chain** - Required for critical/high
1267
- 7. **Quality over quantity** - 10 solid findings > 50 vague ones
1268
- 8. **Architecture matters** - Trust boundaries, data flow, scalability
1269
- 9. **Performance impacts security** - N+1 queries DoS, memory leaks → crashes
1270
- 10. **Run `coverme report`** - Not done until HTML opens!
1277
+ 1. **CREATE DETAILED FINDINGS** - DO NOT just write executiveSummary! You MUST populate the `findings` array with full finding objects!
1278
+ 2. **Silent failures are CRITICAL** - They hide production bugs in payments, auth, data
1279
+ 3. **Read actual code** - Don't guess, read the files
1280
+ 4. **Check git history** - Secrets may have been removed but still exposed
1281
+ 5. **Think like an attacker** - How would you exploit this?
1282
+ 6. **Be specific** - File:line, code snippets, attack chains
1283
+ 7. **DREAD + Attack Chain** - Required for critical/high
1284
+ 8. **Quality over quantity** - 10 solid findings > 50 vague ones
1285
+ 9. **Architecture matters** - Trust boundaries, data flow, scalability
1286
+ 10. **Performance impacts security** - N+1 queries DoS, memory leaks → crashes
1287
+ 11. **Include ROI estimates** - human vs claudeCode time for every finding
1288
+ 12. **Run `coverme report`** - Not done until HTML opens!
1289
+
1290
+ ---
1291
+
1292
+ ⚠️ **FINAL CHECK BEFORE SUBMITTING scan.json:**
1293
+
1294
+ - [ ] `findings` array contains at least 3-10 detailed finding objects (NOT empty!)
1295
+ - [ ] Each finding has businessImpact, proofOfConcept, attackChain, quickFix, properFix, testing, detection, estimatedEffort
1296
+ - [ ] executiveSummary.topRisks matches the findings in the findings array
1297
+ - [ ] summary counts (critical/high/medium/low) match the findings array length
1271
1298
 
1272
1299
  ---
1273
1300
 
@@ -2587,13 +2587,168 @@
2587
2587
  <p>{{impact}}</p>
2588
2588
  </div>
2589
2589
  {{/if}}
2590
+
2591
+ {{#if businessImpact}}
2592
+ <div class="info-box" style="background: linear-gradient(135deg, #fff5f5 0%, #ffe5e5 100%); border-left: 4px solid #e53e3e;">
2593
+ <div class="info-label" style="color: #c53030; font-weight: 600;">💰 Business Impact</div>
2594
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 8px;">
2595
+ {{#if businessImpact.financial}}
2596
+ <div><strong style="color: #c53030;">Financial:</strong> {{businessImpact.financial}}</div>
2597
+ {{/if}}
2598
+ {{#if businessImpact.reputation}}
2599
+ <div><strong style="color: #c53030;">Reputation:</strong> {{businessImpact.reputation}}</div>
2600
+ {{/if}}
2601
+ {{#if businessImpact.legal}}
2602
+ <div><strong style="color: #c53030;">Legal:</strong> {{businessImpact.legal}}</div>
2603
+ {{/if}}
2604
+ {{#if businessImpact.operational}}
2605
+ <div><strong style="color: #c53030;">Operational:</strong> {{businessImpact.operational}}</div>
2606
+ {{/if}}
2607
+ </div>
2608
+ </div>
2609
+ {{/if}}
2610
+
2611
+ {{#if realWorldExamples}}
2612
+ <div class="info-box" style="background: linear-gradient(135deg, #fff7ed 0%, #ffedd5 100%); border-left: 4px solid #ea580c;">
2613
+ <div class="info-label" style="color: #c2410c; font-weight: 600;">🌐 Real-World Examples</div>
2614
+ <ul style="margin: 8px 0 0 0; padding-left: 20px;">
2615
+ {{#each realWorldExamples}}
2616
+ <li style="margin: 4px 0; color: #7c2d12;">{{this}}</li>
2617
+ {{/each}}
2618
+ </ul>
2619
+ </div>
2620
+ {{/if}}
2621
+
2622
+ {{#if attackChain}}
2623
+ <div class="info-box" style="background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); border-left: 4px solid #d97706;">
2624
+ <div class="info-label" style="color: #92400e; font-weight: 600;">⚔️ Attack Chain</div>
2625
+ <div style="margin-top: 8px;">
2626
+ {{#each attackChain}}
2627
+ <div style="margin: 8px 0; padding: 8px; background: white; border-radius: 6px; border-left: 3px solid #f59e0b;">
2628
+ <strong style="color: #92400e;">Step {{step}}:</strong> {{action}}
2629
+ <div style="margin-top: 4px; color: #78350f; font-size: 13px;">→ <em>{{result}}</em></div>
2630
+ </div>
2631
+ {{/each}}
2632
+ </div>
2633
+ </div>
2634
+ {{/if}}
2635
+
2590
2636
  {{#if code}}
2591
2637
  <div class="code-block"><code>{{code}}</code></div>
2592
2638
  {{/if}}
2639
+
2640
+ {{#if proofOfConcept}}
2641
+ <details style="margin: 16px 0; border: 2px solid #dc2626; border-radius: 8px; padding: 12px; background: #fef2f2;">
2642
+ <summary style="cursor: pointer; font-weight: 600; color: #991b1b;">🎯 Proof of Concept (Click to expand exploit code)</summary>
2643
+ <div class="code-block" style="margin-top: 12px;"><code>{{proofOfConcept}}</code></div>
2644
+ </details>
2645
+ {{/if}}
2646
+
2593
2647
  <div class="info-box info-fix">
2594
2648
  <div class="info-label">Recommendation</div>
2595
2649
  <p>{{recommendation}}</p>
2596
2650
  </div>
2651
+
2652
+ {{#if quickFix}}
2653
+ <div class="info-box" style="background: linear-gradient(135deg, #fef9c3 0%, #fef08a 100%); border-left: 4px solid #ca8a04;">
2654
+ <div class="info-label" style="color: #854d0e; font-weight: 600;">⚡ Quick Fix ({{quickFix.description}})</div>
2655
+ <div class="code-block" style="margin-top: 8px;"><code>{{quickFix.code}}</code></div>
2656
+ {{#if quickFix.limitations}}
2657
+ <p style="margin-top: 8px; padding: 8px; background: white; border-radius: 4px; color: #a16207; font-size: 13px;">
2658
+ <strong>⚠️ Limitations:</strong> {{quickFix.limitations}}
2659
+ </p>
2660
+ {{/if}}
2661
+ </div>
2662
+ {{/if}}
2663
+
2664
+ {{#if properFix}}
2665
+ <div class="info-box" style="background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%); border-left: 4px solid #16a34a;">
2666
+ <div class="info-label" style="color: #166534; font-weight: 600;">✅ Proper Fix ({{properFix.description}})</div>
2667
+ <div class="code-block" style="margin-top: 8px;"><code>{{properFix.code}}</code></div>
2668
+ {{#if properFix.additionalSteps}}
2669
+ <div style="margin-top: 12px;">
2670
+ <strong style="color: #166534;">Additional Steps:</strong>
2671
+ <ul style="margin: 8px 0 0 0; padding-left: 20px;">
2672
+ {{#each properFix.additionalSteps}}
2673
+ <li style="margin: 4px 0; color: #14532d;">{{this}}</li>
2674
+ {{/each}}
2675
+ </ul>
2676
+ </div>
2677
+ {{/if}}
2678
+ </div>
2679
+ {{/if}}
2680
+
2681
+ {{#if testing}}
2682
+ <details style="margin: 16px 0; border: 1px solid #3b82f6; border-radius: 8px; padding: 12px; background: #eff6ff;">
2683
+ <summary style="cursor: pointer; font-weight: 600; color: #1e40af;">🧪 Testing Instructions</summary>
2684
+ <div style="margin-top: 12px;">
2685
+ {{#if testing.description}}
2686
+ <p style="color: #1e3a8a; margin-bottom: 8px;">{{testing.description}}</p>
2687
+ {{/if}}
2688
+ {{#if testing.manual}}
2689
+ <div style="margin: 8px 0;">
2690
+ <strong style="color: #1e40af;">Manual Tests:</strong>
2691
+ <ul style="margin: 4px 0 0 0; padding-left: 20px;">
2692
+ {{#each testing.manual}}
2693
+ <li style="margin: 4px 0; color: #1e3a8a;">{{this}}</li>
2694
+ {{/each}}
2695
+ </ul>
2696
+ </div>
2697
+ {{/if}}
2698
+ {{#if testing.automated}}
2699
+ <div style="margin: 12px 0;">
2700
+ <strong style="color: #1e40af;">Automated Test:</strong>
2701
+ <div class="code-block" style="margin-top: 4px;"><code>{{testing.automated}}</code></div>
2702
+ </div>
2703
+ {{/if}}
2704
+ </div>
2705
+ </details>
2706
+ {{/if}}
2707
+
2708
+ {{#if detection}}
2709
+ <details style="margin: 16px 0; border: 1px solid #8b5cf6; border-radius: 8px; padding: 12px; background: #faf5ff;">
2710
+ <summary style="cursor: pointer; font-weight: 600; color: #6b21a8;">🔍 Detection Method (Check if already exploited)</summary>
2711
+ <div style="margin-top: 12px;">
2712
+ {{#if detection.description}}
2713
+ <p style="color: #581c87; margin-bottom: 8px;">{{detection.description}}</p>
2714
+ {{/if}}
2715
+ {{#if detection.commands}}
2716
+ <div class="code-block"><code>{{#each detection.commands}}{{this}}
2717
+ {{/each}}</code></div>
2718
+ {{/if}}
2719
+ {{#if detection.indicators}}
2720
+ <div style="margin: 12px 0;">
2721
+ <strong style="color: #6b21a8;">Indicators of Compromise:</strong>
2722
+ <ul style="margin: 4px 0 0 0; padding-left: 20px;">
2723
+ {{#each detection.indicators}}
2724
+ <li style="margin: 4px 0; color: #581c87;">{{this}}</li>
2725
+ {{/each}}
2726
+ </ul>
2727
+ </div>
2728
+ {{/if}}
2729
+ </div>
2730
+ </details>
2731
+ {{/if}}
2732
+
2733
+ {{#if estimatedEffort}}
2734
+ <div class="info-box" style="background: linear-gradient(135deg, #e0f2fe 0%, #bae6fd 100%); border-left: 4px solid #0284c7;">
2735
+ <div class="info-label" style="color: #075985; font-weight: 600;">⏱️ Fix Time Estimate (Human vs Claude Code)</div>
2736
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 12px;">
2737
+ <div style="padding: 12px; background: white; border-radius: 6px; border: 1px solid #7dd3fc;">
2738
+ <div style="font-size: 11px; color: #0c4a6e; font-weight: 600; margin-bottom: 4px;">👨‍💻 HUMAN DEVELOPER</div>
2739
+ <div style="font-size: 18px; color: #0369a1; font-weight: 700;">{{estimatedEffort.human}}</div>
2740
+ </div>
2741
+ <div style="padding: 12px; background: white; border-radius: 6px; border: 1px solid #0ea5e9;">
2742
+ <div style="font-size: 11px; color: #0c4a6e; font-weight: 600; margin-bottom: 4px;">🤖 CLAUDE CODE</div>
2743
+ <div style="font-size: 18px; color: #0284c7; font-weight: 700;">{{estimatedEffort.claudeCode}}</div>
2744
+ </div>
2745
+ </div>
2746
+ <div style="margin-top: 12px; padding: 10px; background: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%); border-radius: 6px; text-align: center; color: white; font-weight: 700; font-size: 16px;">
2747
+ 🚀 ROI: {{estimatedEffort.roi}}
2748
+ </div>
2749
+ </div>
2750
+ {{/if}}
2751
+
2597
2752
  <div class="prompt-box">
2598
2753
  <div class="prompt-header">
2599
2754
  <span class="prompt-label">Claude Code Prompt</span>
@@ -3006,13 +3161,168 @@ Solution: {{recommendation}}</div>
3006
3161
  <p>{{impact}}</p>
3007
3162
  </div>
3008
3163
  {{/if}}
3164
+
3165
+ {{#if businessImpact}}
3166
+ <div class="info-box" style="background: linear-gradient(135deg, #fff5f5 0%, #ffe5e5 100%); border-left: 4px solid #e53e3e;">
3167
+ <div class="info-label" style="color: #c53030; font-weight: 600;">💰 Business Impact</div>
3168
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 8px;">
3169
+ {{#if businessImpact.financial}}
3170
+ <div><strong style="color: #c53030;">Financial:</strong> {{businessImpact.financial}}</div>
3171
+ {{/if}}
3172
+ {{#if businessImpact.reputation}}
3173
+ <div><strong style="color: #c53030;">Reputation:</strong> {{businessImpact.reputation}}</div>
3174
+ {{/if}}
3175
+ {{#if businessImpact.legal}}
3176
+ <div><strong style="color: #c53030;">Legal:</strong> {{businessImpact.legal}}</div>
3177
+ {{/if}}
3178
+ {{#if businessImpact.operational}}
3179
+ <div><strong style="color: #c53030;">Operational:</strong> {{businessImpact.operational}}</div>
3180
+ {{/if}}
3181
+ </div>
3182
+ </div>
3183
+ {{/if}}
3184
+
3185
+ {{#if realWorldExamples}}
3186
+ <div class="info-box" style="background: linear-gradient(135deg, #fff7ed 0%, #ffedd5 100%); border-left: 4px solid #ea580c;">
3187
+ <div class="info-label" style="color: #c2410c; font-weight: 600;">🌐 Real-World Examples</div>
3188
+ <ul style="margin: 8px 0 0 0; padding-left: 20px;">
3189
+ {{#each realWorldExamples}}
3190
+ <li style="margin: 4px 0; color: #7c2d12;">{{this}}</li>
3191
+ {{/each}}
3192
+ </ul>
3193
+ </div>
3194
+ {{/if}}
3195
+
3196
+ {{#if attackChain}}
3197
+ <div class="info-box" style="background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); border-left: 4px solid #d97706;">
3198
+ <div class="info-label" style="color: #92400e; font-weight: 600;">⚔️ Attack Chain</div>
3199
+ <div style="margin-top: 8px;">
3200
+ {{#each attackChain}}
3201
+ <div style="margin: 8px 0; padding: 8px; background: white; border-radius: 6px; border-left: 3px solid #f59e0b;">
3202
+ <strong style="color: #92400e;">Step {{step}}:</strong> {{action}}
3203
+ <div style="margin-top: 4px; color: #78350f; font-size: 13px;">→ <em>{{result}}</em></div>
3204
+ </div>
3205
+ {{/each}}
3206
+ </div>
3207
+ </div>
3208
+ {{/if}}
3209
+
3009
3210
  {{#if code}}
3010
3211
  <div class="code-block"><code>{{code}}</code></div>
3011
3212
  {{/if}}
3213
+
3214
+ {{#if proofOfConcept}}
3215
+ <details style="margin: 16px 0; border: 2px solid #dc2626; border-radius: 8px; padding: 12px; background: #fef2f2;">
3216
+ <summary style="cursor: pointer; font-weight: 600; color: #991b1b;">🎯 Proof of Concept (Click to expand exploit code)</summary>
3217
+ <div class="code-block" style="margin-top: 12px;"><code>{{proofOfConcept}}</code></div>
3218
+ </details>
3219
+ {{/if}}
3220
+
3012
3221
  <div class="info-box info-fix">
3013
3222
  <div class="info-label">Recommendation</div>
3014
3223
  <p>{{recommendation}}</p>
3015
3224
  </div>
3225
+
3226
+ {{#if quickFix}}
3227
+ <div class="info-box" style="background: linear-gradient(135deg, #fef9c3 0%, #fef08a 100%); border-left: 4px solid #ca8a04;">
3228
+ <div class="info-label" style="color: #854d0e; font-weight: 600;">⚡ Quick Fix ({{quickFix.description}})</div>
3229
+ <div class="code-block" style="margin-top: 8px;"><code>{{quickFix.code}}</code></div>
3230
+ {{#if quickFix.limitations}}
3231
+ <p style="margin-top: 8px; padding: 8px; background: white; border-radius: 4px; color: #a16207; font-size: 13px;">
3232
+ <strong>⚠️ Limitations:</strong> {{quickFix.limitations}}
3233
+ </p>
3234
+ {{/if}}
3235
+ </div>
3236
+ {{/if}}
3237
+
3238
+ {{#if properFix}}
3239
+ <div class="info-box" style="background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%); border-left: 4px solid #16a34a;">
3240
+ <div class="info-label" style="color: #166534; font-weight: 600;">✅ Proper Fix ({{properFix.description}})</div>
3241
+ <div class="code-block" style="margin-top: 8px;"><code>{{properFix.code}}</code></div>
3242
+ {{#if properFix.additionalSteps}}
3243
+ <div style="margin-top: 12px;">
3244
+ <strong style="color: #166534;">Additional Steps:</strong>
3245
+ <ul style="margin: 8px 0 0 0; padding-left: 20px;">
3246
+ {{#each properFix.additionalSteps}}
3247
+ <li style="margin: 4px 0; color: #14532d;">{{this}}</li>
3248
+ {{/each}}
3249
+ </ul>
3250
+ </div>
3251
+ {{/if}}
3252
+ </div>
3253
+ {{/if}}
3254
+
3255
+ {{#if testing}}
3256
+ <details style="margin: 16px 0; border: 1px solid #3b82f6; border-radius: 8px; padding: 12px; background: #eff6ff;">
3257
+ <summary style="cursor: pointer; font-weight: 600; color: #1e40af;">🧪 Testing Instructions</summary>
3258
+ <div style="margin-top: 12px;">
3259
+ {{#if testing.description}}
3260
+ <p style="color: #1e3a8a; margin-bottom: 8px;">{{testing.description}}</p>
3261
+ {{/if}}
3262
+ {{#if testing.manual}}
3263
+ <div style="margin: 8px 0;">
3264
+ <strong style="color: #1e40af;">Manual Tests:</strong>
3265
+ <ul style="margin: 4px 0 0 0; padding-left: 20px;">
3266
+ {{#each testing.manual}}
3267
+ <li style="margin: 4px 0; color: #1e3a8a;">{{this}}</li>
3268
+ {{/each}}
3269
+ </ul>
3270
+ </div>
3271
+ {{/if}}
3272
+ {{#if testing.automated}}
3273
+ <div style="margin: 12px 0;">
3274
+ <strong style="color: #1e40af;">Automated Test:</strong>
3275
+ <div class="code-block" style="margin-top: 4px;"><code>{{testing.automated}}</code></div>
3276
+ </div>
3277
+ {{/if}}
3278
+ </div>
3279
+ </details>
3280
+ {{/if}}
3281
+
3282
+ {{#if detection}}
3283
+ <details style="margin: 16px 0; border: 1px solid #8b5cf6; border-radius: 8px; padding: 12px; background: #faf5ff;">
3284
+ <summary style="cursor: pointer; font-weight: 600; color: #6b21a8;">🔍 Detection Method (Check if already exploited)</summary>
3285
+ <div style="margin-top: 12px;">
3286
+ {{#if detection.description}}
3287
+ <p style="color: #581c87; margin-bottom: 8px;">{{detection.description}}</p>
3288
+ {{/if}}
3289
+ {{#if detection.commands}}
3290
+ <div class="code-block"><code>{{#each detection.commands}}{{this}}
3291
+ {{/each}}</code></div>
3292
+ {{/if}}
3293
+ {{#if detection.indicators}}
3294
+ <div style="margin: 12px 0;">
3295
+ <strong style="color: #6b21a8;">Indicators of Compromise:</strong>
3296
+ <ul style="margin: 4px 0 0 0; padding-left: 20px;">
3297
+ {{#each detection.indicators}}
3298
+ <li style="margin: 4px 0; color: #581c87;">{{this}}</li>
3299
+ {{/each}}
3300
+ </ul>
3301
+ </div>
3302
+ {{/if}}
3303
+ </div>
3304
+ </details>
3305
+ {{/if}}
3306
+
3307
+ {{#if estimatedEffort}}
3308
+ <div class="info-box" style="background: linear-gradient(135deg, #e0f2fe 0%, #bae6fd 100%); border-left: 4px solid #0284c7;">
3309
+ <div class="info-label" style="color: #075985; font-weight: 600;">⏱️ Fix Time Estimate (Human vs Claude Code)</div>
3310
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 12px;">
3311
+ <div style="padding: 12px; background: white; border-radius: 6px; border: 1px solid #7dd3fc;">
3312
+ <div style="font-size: 11px; color: #0c4a6e; font-weight: 600; margin-bottom: 4px;">👨‍💻 HUMAN DEVELOPER</div>
3313
+ <div style="font-size: 18px; color: #0369a1; font-weight: 700;">{{estimatedEffort.human}}</div>
3314
+ </div>
3315
+ <div style="padding: 12px; background: white; border-radius: 6px; border: 1px solid #0ea5e9;">
3316
+ <div style="font-size: 11px; color: #0c4a6e; font-weight: 600; margin-bottom: 4px;">🤖 CLAUDE CODE</div>
3317
+ <div style="font-size: 18px; color: #0284c7; font-weight: 700;">{{estimatedEffort.claudeCode}}</div>
3318
+ </div>
3319
+ </div>
3320
+ <div style="margin-top: 12px; padding: 10px; background: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%); border-radius: 6px; text-align: center; color: white; font-weight: 700; font-size: 16px;">
3321
+ 🚀 ROI: {{estimatedEffort.roi}}
3322
+ </div>
3323
+ </div>
3324
+ {{/if}}
3325
+
3016
3326
  <div class="prompt-box">
3017
3327
  <div class="prompt-header">
3018
3328
  <span class="prompt-label">Claude Code Prompt</span>
@@ -3063,13 +3373,168 @@ Solution: {{recommendation}}</div>
3063
3373
  <p>{{impact}}</p>
3064
3374
  </div>
3065
3375
  {{/if}}
3376
+
3377
+ {{#if businessImpact}}
3378
+ <div class="info-box" style="background: linear-gradient(135deg, #fff5f5 0%, #ffe5e5 100%); border-left: 4px solid #e53e3e;">
3379
+ <div class="info-label" style="color: #c53030; font-weight: 600;">💰 Business Impact</div>
3380
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 12px; margin-top: 8px;">
3381
+ {{#if businessImpact.financial}}
3382
+ <div><strong style="color: #c53030;">Financial:</strong> {{businessImpact.financial}}</div>
3383
+ {{/if}}
3384
+ {{#if businessImpact.reputation}}
3385
+ <div><strong style="color: #c53030;">Reputation:</strong> {{businessImpact.reputation}}</div>
3386
+ {{/if}}
3387
+ {{#if businessImpact.legal}}
3388
+ <div><strong style="color: #c53030;">Legal:</strong> {{businessImpact.legal}}</div>
3389
+ {{/if}}
3390
+ {{#if businessImpact.operational}}
3391
+ <div><strong style="color: #c53030;">Operational:</strong> {{businessImpact.operational}}</div>
3392
+ {{/if}}
3393
+ </div>
3394
+ </div>
3395
+ {{/if}}
3396
+
3397
+ {{#if realWorldExamples}}
3398
+ <div class="info-box" style="background: linear-gradient(135deg, #fff7ed 0%, #ffedd5 100%); border-left: 4px solid #ea580c;">
3399
+ <div class="info-label" style="color: #c2410c; font-weight: 600;">🌐 Real-World Examples</div>
3400
+ <ul style="margin: 8px 0 0 0; padding-left: 20px;">
3401
+ {{#each realWorldExamples}}
3402
+ <li style="margin: 4px 0; color: #7c2d12;">{{this}}</li>
3403
+ {{/each}}
3404
+ </ul>
3405
+ </div>
3406
+ {{/if}}
3407
+
3408
+ {{#if attackChain}}
3409
+ <div class="info-box" style="background: linear-gradient(135deg, #fef3c7 0%, #fde68a 100%); border-left: 4px solid #d97706;">
3410
+ <div class="info-label" style="color: #92400e; font-weight: 600;">⚔️ Attack Chain</div>
3411
+ <div style="margin-top: 8px;">
3412
+ {{#each attackChain}}
3413
+ <div style="margin: 8px 0; padding: 8px; background: white; border-radius: 6px; border-left: 3px solid #f59e0b;">
3414
+ <strong style="color: #92400e;">Step {{step}}:</strong> {{action}}
3415
+ <div style="margin-top: 4px; color: #78350f; font-size: 13px;">→ <em>{{result}}</em></div>
3416
+ </div>
3417
+ {{/each}}
3418
+ </div>
3419
+ </div>
3420
+ {{/if}}
3421
+
3066
3422
  {{#if code}}
3067
3423
  <div class="code-block"><code>{{code}}</code></div>
3068
3424
  {{/if}}
3425
+
3426
+ {{#if proofOfConcept}}
3427
+ <details style="margin: 16px 0; border: 2px solid #dc2626; border-radius: 8px; padding: 12px; background: #fef2f2;">
3428
+ <summary style="cursor: pointer; font-weight: 600; color: #991b1b;">🎯 Proof of Concept (Click to expand exploit code)</summary>
3429
+ <div class="code-block" style="margin-top: 12px;"><code>{{proofOfConcept}}</code></div>
3430
+ </details>
3431
+ {{/if}}
3432
+
3069
3433
  <div class="info-box info-fix">
3070
3434
  <div class="info-label">Recommendation</div>
3071
3435
  <p>{{recommendation}}</p>
3072
3436
  </div>
3437
+
3438
+ {{#if quickFix}}
3439
+ <div class="info-box" style="background: linear-gradient(135deg, #fef9c3 0%, #fef08a 100%); border-left: 4px solid #ca8a04;">
3440
+ <div class="info-label" style="color: #854d0e; font-weight: 600;">⚡ Quick Fix ({{quickFix.description}})</div>
3441
+ <div class="code-block" style="margin-top: 8px;"><code>{{quickFix.code}}</code></div>
3442
+ {{#if quickFix.limitations}}
3443
+ <p style="margin-top: 8px; padding: 8px; background: white; border-radius: 4px; color: #a16207; font-size: 13px;">
3444
+ <strong>⚠️ Limitations:</strong> {{quickFix.limitations}}
3445
+ </p>
3446
+ {{/if}}
3447
+ </div>
3448
+ {{/if}}
3449
+
3450
+ {{#if properFix}}
3451
+ <div class="info-box" style="background: linear-gradient(135deg, #dcfce7 0%, #bbf7d0 100%); border-left: 4px solid #16a34a;">
3452
+ <div class="info-label" style="color: #166534; font-weight: 600;">✅ Proper Fix ({{properFix.description}})</div>
3453
+ <div class="code-block" style="margin-top: 8px;"><code>{{properFix.code}}</code></div>
3454
+ {{#if properFix.additionalSteps}}
3455
+ <div style="margin-top: 12px;">
3456
+ <strong style="color: #166534;">Additional Steps:</strong>
3457
+ <ul style="margin: 8px 0 0 0; padding-left: 20px;">
3458
+ {{#each properFix.additionalSteps}}
3459
+ <li style="margin: 4px 0; color: #14532d;">{{this}}</li>
3460
+ {{/each}}
3461
+ </ul>
3462
+ </div>
3463
+ {{/if}}
3464
+ </div>
3465
+ {{/if}}
3466
+
3467
+ {{#if testing}}
3468
+ <details style="margin: 16px 0; border: 1px solid #3b82f6; border-radius: 8px; padding: 12px; background: #eff6ff;">
3469
+ <summary style="cursor: pointer; font-weight: 600; color: #1e40af;">🧪 Testing Instructions</summary>
3470
+ <div style="margin-top: 12px;">
3471
+ {{#if testing.description}}
3472
+ <p style="color: #1e3a8a; margin-bottom: 8px;">{{testing.description}}</p>
3473
+ {{/if}}
3474
+ {{#if testing.manual}}
3475
+ <div style="margin: 8px 0;">
3476
+ <strong style="color: #1e40af;">Manual Tests:</strong>
3477
+ <ul style="margin: 4px 0 0 0; padding-left: 20px;">
3478
+ {{#each testing.manual}}
3479
+ <li style="margin: 4px 0; color: #1e3a8a;">{{this}}</li>
3480
+ {{/each}}
3481
+ </ul>
3482
+ </div>
3483
+ {{/if}}
3484
+ {{#if testing.automated}}
3485
+ <div style="margin: 12px 0;">
3486
+ <strong style="color: #1e40af;">Automated Test:</strong>
3487
+ <div class="code-block" style="margin-top: 4px;"><code>{{testing.automated}}</code></div>
3488
+ </div>
3489
+ {{/if}}
3490
+ </div>
3491
+ </details>
3492
+ {{/if}}
3493
+
3494
+ {{#if detection}}
3495
+ <details style="margin: 16px 0; border: 1px solid #8b5cf6; border-radius: 8px; padding: 12px; background: #faf5ff;">
3496
+ <summary style="cursor: pointer; font-weight: 600; color: #6b21a8;">🔍 Detection Method (Check if already exploited)</summary>
3497
+ <div style="margin-top: 12px;">
3498
+ {{#if detection.description}}
3499
+ <p style="color: #581c87; margin-bottom: 8px;">{{detection.description}}</p>
3500
+ {{/if}}
3501
+ {{#if detection.commands}}
3502
+ <div class="code-block"><code>{{#each detection.commands}}{{this}}
3503
+ {{/each}}</code></div>
3504
+ {{/if}}
3505
+ {{#if detection.indicators}}
3506
+ <div style="margin: 12px 0;">
3507
+ <strong style="color: #6b21a8;">Indicators of Compromise:</strong>
3508
+ <ul style="margin: 4px 0 0 0; padding-left: 20px;">
3509
+ {{#each detection.indicators}}
3510
+ <li style="margin: 4px 0; color: #581c87;">{{this}}</li>
3511
+ {{/each}}
3512
+ </ul>
3513
+ </div>
3514
+ {{/if}}
3515
+ </div>
3516
+ </details>
3517
+ {{/if}}
3518
+
3519
+ {{#if estimatedEffort}}
3520
+ <div class="info-box" style="background: linear-gradient(135deg, #e0f2fe 0%, #bae6fd 100%); border-left: 4px solid #0284c7;">
3521
+ <div class="info-label" style="color: #075985; font-weight: 600;">⏱️ Fix Time Estimate (Human vs Claude Code)</div>
3522
+ <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-top: 12px;">
3523
+ <div style="padding: 12px; background: white; border-radius: 6px; border: 1px solid #7dd3fc;">
3524
+ <div style="font-size: 11px; color: #0c4a6e; font-weight: 600; margin-bottom: 4px;">👨‍💻 HUMAN DEVELOPER</div>
3525
+ <div style="font-size: 18px; color: #0369a1; font-weight: 700;">{{estimatedEffort.human}}</div>
3526
+ </div>
3527
+ <div style="padding: 12px; background: white; border-radius: 6px; border: 1px solid #0ea5e9;">
3528
+ <div style="font-size: 11px; color: #0c4a6e; font-weight: 600; margin-bottom: 4px;">🤖 CLAUDE CODE</div>
3529
+ <div style="font-size: 18px; color: #0284c7; font-weight: 700;">{{estimatedEffort.claudeCode}}</div>
3530
+ </div>
3531
+ </div>
3532
+ <div style="margin-top: 12px; padding: 10px; background: linear-gradient(135deg, #0ea5e9 0%, #0284c7 100%); border-radius: 6px; text-align: center; color: white; font-weight: 700; font-size: 16px;">
3533
+ 🚀 ROI: {{estimatedEffort.roi}}
3534
+ </div>
3535
+ </div>
3536
+ {{/if}}
3537
+
3073
3538
  <div class="prompt-box">
3074
3539
  <div class="prompt-header">
3075
3540
  <span class="prompt-label">Claude Code Prompt</span>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "coverme-scanner",
3
- "version": "2.0.0",
3
+ "version": "2.0.2",
4
4
  "description": "AI-powered code scanner with multi-agent verification for Claude Code. One command scans everything.",
5
5
  "main": "dist/index.js",
6
6
  "files": [