A list of Reserved CVEs that have not been published that have Evidence of Exploitation, Weaponized Exploits or Exploits. The list is prioritized in this order with exploit counts being used for the exploits section.
Source
from IPython.display import display, HTML
# Step 1: Filter for CVEs where NVD Published Date is missing
df_filtered = df[df["NVD Published Date"].isna()].copy()
# Step 2: Assign sort group priorities
df_filtered["SortGroup"] = 3 # Default: POC
# Group 1: VulnCheck KEV present
df_filtered.loc[df_filtered["VulnCheck KEV Added Date"].notnull(), "SortGroup"] = 1
# Group 2: Weaponized and not in VulnCheck KEV
df_filtered.loc[
(df_filtered["VulnCheck KEV Added Date"].isnull()) &
(df_filtered["Max Exploit Maturity"] == "weaponized"),
"SortGroup"
] = 2
# Step 3: Sort each group
group1 = df_filtered[df_filtered["SortGroup"] == 1].sort_values("VulnCheck KEV Added Date", ascending=False)
group2 = df_filtered[df_filtered["SortGroup"] == 2].sort_values("Exploit Reference Date", ascending=False)
group3 = df_filtered[df_filtered["SortGroup"] == 3].sort_values(
["# of Exploits", "Exploit Reference Date"],
ascending=[False, False]
)
# Step 4: Concatenate and count
df_sorted = pd.concat([group1, group2, group3]).reset_index(drop=True)
# Step 5: Calculate "days since" values
today = pd.Timestamp.now().normalize()
def days_since(date):
if pd.isnull(date) or date.year == 1970:
return "-"
return (today - date).days
df_sorted["Days Since Exploitation Reported"] = df_sorted["Exploitation Reference Date"].apply(days_since)
df_sorted["Days Since Exploit Published"] = df_sorted["Exploit Reference Date"].apply(days_since)
# Step 6: Conditional filtering based on exploitation or exploit date
def include_row(row):
exp_days = row["Days Since Exploitation Reported"]
poc_days = row["Days Since Exploit Published"]
# If exploitation reported and it's older than 1 day β include
if isinstance(exp_days, int) and exp_days > 1:
return True
# Else, if there's no valid exploitation, include only if exploit date is > 1
if (pd.isnull(row["Exploitation Reference Date"]) or exp_days == "-") and isinstance(poc_days, int) and poc_days > 1:
return True
return False
df_filtered_days = df_sorted[df_sorted.apply(include_row, axis=1)]
# Step 7: Truncate to Top 50
total_reserved = len(df_filtered_days)
top_50 = df_filtered_days.head(50).copy()
# Step 8: Final column selection
display_df = top_50[[
"CVE",
"Vendor",
"Product",
"Max Exploit Maturity",
"# of Exploits",
"Days Since Exploitation Reported",
"Days Since Exploit Published",
"Exploitation Reference",
"Exploit Reference"
]]
# Step 9: Replace NaNs with "-"
columns_to_clean = ["Vendor", "Product", "Max Exploit Maturity", "Exploitation Reference", "Exploit Reference"]
for col in columns_to_clean:
display_df[col].fillna("-")
# Step 10: Title + Count + Scrollable HTML output
title_html = """
<h2 style="margin-bottom: 5px;">Top 50 RESERVED AND EXPLOIT(ED) CVE's</h2>
<p><strong>Total Count of Reserved CVE's with Exploitation/Exploit Evidence: {}</strong></p>
""".format(total_reserved)
table_html = display_df.to_html(index=False, escape=False)
scrollable_html = f"""
{title_html}
<div style="max-height: 500px; overflow-y: scroll; border: 1px solid #ccc; padding: 10px">
{table_html}
</div>
"""
display(HTML(scrollable_html))
Loading...