fix(evaluations): bypass Cloudflare 403 with browser headers + hardcoded fallback rounds
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
Some checks failed
Aegis CI / lint-and-test (push) Has been cancelled
- Add browser User-Agent and Referer headers to all evals.mitre.org requests
- fetch_rounds_with_status() returns api_reachable flag + rounds list
- Fallback to 5 known public CrowdStrike rounds (APT29/R2 through OilRig/R6)
when live API is blocked, so UI always shows something actionable
- Router returns {rounds, api_reachable, api_error} instead of plain array
- Frontend shows orange warning banner when using fallback data
- Remove 502 HTTPException - rounds are always returned (live or fallback)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -515,20 +515,18 @@ def list_evaluation_rounds(
|
||||
|
||||
Each entry includes whether it has already been imported into this platform.
|
||||
"""
|
||||
from app.services.attck_evaluations_service import fetch_available_rounds
|
||||
from app.services.attck_evaluations_service import fetch_rounds_with_status
|
||||
from app.models.evaluation_import import EvaluationImport
|
||||
|
||||
try:
|
||||
rounds = fetch_available_rounds()
|
||||
except Exception as exc:
|
||||
raise HTTPException(status_code=502, detail=f"Could not reach MITRE Evaluations API: {exc}")
|
||||
status_info = fetch_rounds_with_status()
|
||||
rounds = status_info["rounds"]
|
||||
|
||||
imported = {
|
||||
row.adversary_name.lower(): row
|
||||
for row in db.query(EvaluationImport).filter(EvaluationImport.status == "completed").all()
|
||||
}
|
||||
|
||||
return [
|
||||
round_list = [
|
||||
{
|
||||
"name": r["name"],
|
||||
"display_name": r.get("display_name", r["name"]),
|
||||
@@ -544,6 +542,12 @@ def list_evaluation_rounds(
|
||||
for r in rounds
|
||||
]
|
||||
|
||||
return {
|
||||
"rounds": round_list,
|
||||
"api_reachable": status_info["api_reachable"],
|
||||
"api_error": status_info.get("api_error"),
|
||||
}
|
||||
|
||||
|
||||
@router.post("/attck-evaluations/import")
|
||||
def import_evaluation_round(
|
||||
|
||||
Reference in New Issue
Block a user