Files
CVEs-PoC/templates/index.html
T
2025-12-17 18:24:55 +01:00

117 lines
3.8 KiB
HTML

{% extends "base.html" %}
{% set body_class = "color-no-search" %}
{% block content %}
<section class="hero hero-signal" data-search-root>
<div class="hero-meta">
<p class="eyebrow">Signal-first</p>
<h1>Search PoCs, KEV, and EPSS without the clutter</h1>
<p class="lede">Built for fast triage. One page, no badges, no filler.</p>
</div>
<form class="searchForm" action="#">
<input type="text" class="search" placeholder="Search CVE, vendor, product, or keyword" autocomplete="off">
</form>
<div class="stat-row">
<div class="stat"><strong>{{ metrics.kev_total }}</strong><span>KEV entries tracked</span></div>
<div class="stat"><strong>{{ metrics.high_epss_count }}</strong><span>High-EPSS not in KEV</span></div>
<div class="stat"><strong>{{ metrics.recent_kev_count }}</strong><span>New KEV in last 30 days</span></div>
</div>
<div class="search-results" data-results style="display:none">
<div class="header">
<h2>Results</h2>
<span class="muted">Filter with negative terms (e.g., -windows)</span>
</div>
<div class="noResults">No results yet.</div>
<div class="results-table hide">
<table class="results">
<thead>
<tr>
<td width="18%">CVE</td>
<td>Description / PoC links</td>
</tr>
</thead>
<tbody class="results"></tbody>
</table>
</div>
</div>
</section>
<section class="section">
<div class="section-header">
<h1>Latest KEV additions</h1>
<span class="muted">Last 30 days</span>
</div>
<div class="table-wrap">
<table>
<thead>
<tr><th>CVE</th><th>Vendor</th><th>Product</th><th>EPSS</th><th>Percentile</th><th>Date Added</th><th>Due</th></tr>
</thead>
<tbody>
{% for row in recent_kev %}
<tr>
<td class="cve-cell"><a href="/cve/?id={{ row.cve }}">{{ row.cve }}</a></td>
<td>{{ row.vendor }}</td>
<td>{{ row.product }}</td>
<td>{{ '%.3f'|format(row.epss or 0) }}</td>
<td>{{ '%2.0f'|format((row.percentile or 0)*100) }}th</td>
<td>{{ row.date_added }}</td>
<td>{{ row.due_date or '—' }}</td>
</tr>
{% else %}
<tr><td colspan="7">No recent KEV entries.</td></tr>
{% endfor %}
</tbody>
</table>
</div>
</section>
<section class="section">
<div class="section-header">
<h1>High EPSS not in KEV</h1>
<span class="muted">Sorted by score</span>
</div>
<div class="table-wrap">
<table>
<thead><tr><th>CVE</th><th>EPSS</th><th>Percentile</th><th>PoCs</th><th>Summary</th></tr></thead>
<tbody>
{% for row in data.high_epss %}
<tr>
<td class="cve-cell"><a href="/cve/?id={{ row.cve }}">{{ row.cve }}</a></td>
<td>{{ '%.3f'|format(row.epss or 0) }}</td>
<td>{{ '%2.0f'|format((row.percentile or 0)*100) }}th</td>
<td>{{ row.poc_count }}</td>
<td class="mono">{{ row.summary or 'No public description yet.' }}</td>
</tr>
{% else %}
<tr><td colspan="5">No high-EPSS items outside KEV today.</td></tr>
{% endfor %}
</tbody>
</table>
</div>
</section>
<section class="section">
<div class="section-header">
<h1>Fresh PoCs</h1>
<span class="muted">Recent GitHub movement</span>
</div>
<div class="table-wrap">
<table>
<thead><tr><th>Stars</th><th>Updated</th><th>Name</th><th>Description</th></tr></thead>
<tbody>
{% for row in trending[:20] %}
<tr>
<td>{{ row.stars }}</td>
<td>{{ row.updated }}</td>
<td><a href="{{ row.url }}" target="_blank">{{ row.name }}</a></td>
<td class="mono">{{ row.desc }}</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</section>
{% endblock %}
{% block extra_scripts %}
<script src="/logic.js"></script>
{% endblock %}