fix(e2e): restrict readiness polling to loopback destinations - #1244
fix(e2e): restrict readiness polling to loopback destinations#1244seonghobae wants to merge 8 commits into
Conversation
Added urllib.parse.urlparse to ensure URLs targeted by wait_for_url only point to local loopback addresses (localhost, 127.0.0.1, ::1). This prevents Server-Side Request Forgery vulnerabilities if the readiness URL is attacker-controlled. Added test coverage.
|
👋 Jules, reporting for duty! I'm here to lend a hand with this pull request. When you start a review, I'll add a 👀 emoji to each comment to let you know I've read it. I'll focus on feedback directed at me and will do my best to stay out of conversations between you and other bots or reviewers to keep the noise down. I'll push a commit with your requested changes shortly after. Please note there might be a delay between these steps, but rest assured I'm on the job! For more direct control, you can switch me to Reactive Mode. When this mode is on, I will only act on comments where you specifically mention me with New to Jules? Learn more at jules.google/docs. For security, I will only act on instructions from the user who triggered this task. |
|
Warning Review limit reached
Next review available in: 23 minutes Limit details: You’ve used the included review currently available. You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. How can I continue?Wait for the limit to reset, then comment An organization admin can change what happens after included review limits in Billing. How do review limits work?CodeRabbit enforces per-developer PR review limits within each organization. For paid Pro and Pro+ reviews, CodeRabbit uses a developer's included PR review attempts over the past 7 days to set the current hourly allowance. At typical activity levels, the full plan allowance applies. Higher sustained activity can lower the allowance until earlier attempts leave the 7-day window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (4)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
|
@opencode-agent @cwl-noema-review current-head review for Required mechanical Checks are green on this head; Strix was still in progress at request time. The remaining Devin thread was informational (loopback IPv6/127/8 classifier) and is resolved. Independent current-head approval is required before merge. |
Added urllib.parse.urlparse to ensure URLs targeted by wait_for_url only point to local loopback addresses (via ipaddress.is_loopback). This prevents Server-Side Request Forgery vulnerabilities if the readiness URL is attacker-controlled. Added test coverage.
Added urllib.parse.urlparse to ensure URLs targeted by wait_for_url only point to local loopback addresses (via ipaddress.is_loopback). This prevents Server-Side Request Forgery vulnerabilities if the readiness URL is attacker-controlled. Added test coverage.
Added urllib.parse.urlparse to ensure URLs targeted by wait_for_url only point to local loopback addresses (via ipaddress.is_loopback). This prevents Server-Side Request Forgery vulnerabilities if the readiness URL is attacker-controlled. Added test coverage. Also fixes a CI issue in .github/workflows/strix.yml where an invalid fallback model configuration (openai-direct vs openai_direct) caused "LLM Provider NOT provided" errors, failing the workflow.
…it_for_url" This reverts commit 8cee852.
|
@opencode-agent Please review exact head |
OpenCode Review Overview
Pull request overviewOpenCode reviewed the current-head bounded evidence and found source-backed failed-check findings that must be addressed before merge.
Failed checks
Findings1. HIGH .github/workflows/strix.yml:825 - Strix provider failure blocked current-head security evidence
Failed check evidence for line-specific fixesFailed GitHub Check Evidence
Line-specific repair contract
Failed check: Strix Security Scan/strix
Failed job steps
Check annotations
Failed log signal summaryStrix model attempt and finding summaryNo Strix vulnerability report windows were detected in the failed log. Failed log excerptChanged-File Evidence Mapflowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file: CHANGELOG.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file: CHANGELOG.md"]
R1 --> V1["required checks"]
Evidence --> S2["Docs: sandboxed-web-readiness-loopback-boundary.md"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs: sandboxed-web-readiness-loopback-boundary.md"]
R2 --> V2["docs review"]
Evidence --> S3["CI script: sandboxed_web_e2e.py"]
S3 --> I3["review and security gate shell path"]
I3 --> R3["Review risk: CI script: sandboxed_web_e2e.py"]
R3 --> V3["bash -n plus Strix self-test"]
Evidence --> S4["Test: test_sandboxed_web_e2e.py"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test: test_sandboxed_web_e2e.py"]
R4 --> V4["targeted test run"]
|
There was a problem hiding this comment.
Pull request overview
OpenCode reviewed the current-head bounded evidence and found source-backed failed-check findings that must be addressed before merge.
- Result: REQUEST_CHANGES
- Reason: failed current-head checks were mapped to line-specific findings below for
a0c82c87dfc01b49698fd84db378a71942714b57. - Head SHA:
a0c82c87dfc01b49698fd84db378a71942714b57 - Workflow run: 32655494599
- Workflow attempt: 1
Failed checks
- Strix Security Scan/strix: FAILURE (https://github.com/ContextualWisdomLab/.github/actions/runs/32652188022/job/97225415852)
- Strix Security Scan/strix: failure (https://github.com/ContextualWisdomLab/.github/actions/runs/32652188022/job/97225415852)
Findings
1. HIGH .github/workflows/strix.yml:825 - Strix provider failure blocked current-head security evidence
- Problem: Strix failed before producing vulnerability reports. The failed log reported LLM CONNECTION FAILED, RateLimitError or Too many requests for the primary model, provider/budget output for fallback models, and Configured model and fallback models were unavailable.
- Root cause: The configured GitHub Models primary/fallback provider capacity or provider route failed for this run; no Strix Vulnerability Report window was produced, so there is no application source line to patch from this evidence.
- Fix: Do not approve from this failed scan. Re-run Strix after GitHub Models capacity recovers or run an explicitly configured manual provider evidence scan with valid credentials; keep the configured fallback line at .github/workflows/strix.yml:825 aligned with the approved model list.
- Suggested edit: keep
.github/workflows/strix.yml:825on the approved GitHub Models fallback list and rerun the current-head Strix check; there is no application source patch until Strix emits a vulnerability Code Location. - Regression test: Keep the failed-check evidence collector preserving RateLimitError, budget-limit, provider infrastructure, and unavailable-model lines so OpenCode reviews can distinguish external provider blockers from code vulnerabilities.
Failed check evidence for line-specific fixes
Failed GitHub Check Evidence
- PR: #1244
- Head SHA:
a0c82c87dfc01b49698fd84db378a71942714b57 - Repository:
ContextualWisdomLab/.github
Line-specific repair contract
-
Treat the check logs and annotations below as diagnostic evidence, not as a complete review.
-
For each actionable failed check, inspect the local source or diff and identify the exact file line that must change.
-
OpenCode
REQUEST_CHANGESfindings must includepath,line,root_cause,fix_direction,regression_test_direction, andsuggested_diff. -
Do not request changes with only a GitHub Actions URL or a generic check name.
-
When Strix logs contain multiple
Vulnerability ReportorModel ... Vulnerabilities ...sections, include every model-reported vulnerability in the review evidence and findings, including model name, title, severity, endpoint, and Code Locations/path:line evidence when present. -
Create one OpenCode finding per Strix model vulnerability report; do not satisfy two model reports with one combined finding, even when titles or locations match.
Failed check: Strix Security Scan/strix
- Type:
check_run - Conclusion:
FAILURE - Details URL: https://github.com/ContextualWisdomLab/.github/actions/runs/32652188022/job/97225415852
- Workflow run id:
32652188022 - Check run id:
97225415852
Failed job steps
- step 26: Run Strix (quick) (failure)
Check annotations
- .github:772-772 [failure] Process completed with exit code 1.
- .github:771-771 [failure] Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log.
Failed log signal summary
strix Run Strix (quick) 2026-08-23T16:38:22.6842014Z ^[[36;1m# LLM-backend-unavailable outcomes (GitHub Models "Too many requests"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6853454Z ^[[36;1mbackend_unavailable_signal='RateLimitError|Too many requests\. For more on scraping GitHub|exceeded your current quota|insufficient_quota|billing details|"status"[[:space:]]*:[[:space:]]*"RESOURCE_EXHAUSTED"|tokens_limit_reached|Request body too large|Max size:[[:space:]]*[0-9]+[[:space:]]+tokens|Error code:[[:space:]]*413|LLM CONNECTION FAILED|Could not establish connection to the language model|LLM warm-up failed|Configured model and fallback models were unavailable|Configured Vertex model and fallback models were unavailable|emitted provider infrastructure or failure-signal output|before provider infrastructure failure|litellm(\.exceptions)?\.NotFoundError[^[:cntrl:]]*Nvidia_nimException[^[:cntrl:]]*Error code:[[:space:]]*404|Error during penetration test: loginAsGuest failed after [0-9]+ attempts: curl exit 7: curl: \(7\) Failed to connect to 127\.0\.0\.1 port 48080'^[[0m
strix Run Strix (quick) 2026-08-23T16:39:46.4527751Z │ LLM CONNECTION FAILED │
strix Run Strix (quick) 2026-08-23T16:39:46.4532821Z │ Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error │
strix Run Strix (quick) 2026-08-23T17:12:59.8204729Z raw_response = await [REDACTED].with_raw_response.create(**data, timeout=timeout)
strix Run Strix (quick) 2026-08-23T17:12:59.8212981Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix Run Strix (quick) 2026-08-23T17:12:59.8238365Z async for event in _with_idle_timeout(stream, self._stream_idle_timeout):
strix Run Strix (quick) 2026-08-23T17:12:59.8239520Z File "/opt/hostedtoolcache/Python/3.13.15/x64/lib/python3.13/site-packages/strix/config/models.py", line 378, in _with_idle_timeout
strix Run Strix (quick) 2026-08-23T17:12:59.8240183Z event = await asyncio.wait_for(iterator.__anext__(), timeout)
strix Run Strix (quick) 2026-08-23T17:12:59.8263695Z raise RateLimitError(
strix Run Strix (quick) 2026-08-23T17:12:59.8264975Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix Run Strix (quick) 2026-08-23T17:12:59.8277510Z raw_response = await [REDACTED].with_raw_response.create(**data, timeout=timeout)
strix Run Strix (quick) 2026-08-23T17:12:59.8285846Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix Run Strix (quick) 2026-08-23T17:12:59.8313378Z async for event in _with_idle_timeout(stream, self._stream_idle_timeout):
strix Run Strix (quick) 2026-08-23T17:12:59.8314584Z File "/opt/hostedtoolcache/Python/3.13.15/x64/lib/python3.13/site-packages/strix/config/models.py", line 378, in _with_idle_timeout
strix Run Strix (quick) 2026-08-23T17:12:59.8315427Z event = await asyncio.wait_for(iterator.__anext__(), timeout)
strix Run Strix (quick) 2026-08-23T17:12:59.8335250Z raise RateLimitError(
strix Run Strix (quick) 2026-08-23T17:12:59.8336285Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix Run Strix (quick) 2026-08-23T17:12:59.8727414Z Strix report artifacts emitted warning/fatal/denied/timeout output; failing closed.
strix Run Strix (quick) 2026-08-23T17:12:59.8730444Z Strix run emitted provider infrastructure or failure-signal output; failing closed.
strix Run Strix (quick) 2026-08-23T17:14:05.9320798Z │ LLM CONNECTION FAILED │
strix Run Strix (quick) 2026-08-23T17:14:05.9325692Z │ Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error │
strix Run Strix (quick) 2026-08-23T17:14:05.9848737Z Strix report artifacts emitted warning/fatal/denied/timeout output; failing closed.
strix Run Strix (quick) 2026-08-23T17:33:21.0298496Z Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
strix Run Strix (quick) 2026-08-23T17:33:21.0846918Z Strix run emitted provider infrastructure or failure-signal output; failing closed.
strix Run Strix (quick) 2026-08-23T17:33:21.2990889Z Strix fallback model 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix Run Strix (quick) 2026-08-23T17:33:25.3586986Z │ LLM CONNECTION FAILED │
strix Run Strix (quick) 2026-08-23T17:33:25.6645607Z Strix fallback model 'openai-direct/gpt-5.6-luna' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix Run Strix (quick) 2026-08-23T17:33:25.6667453Z Strix reported zero vulnerabilities before provider infrastructure failure; failing closed because provider infrastructure failures are not clean scan evidence.
strix Run Strix (quick) 2026-08-23T17:33:25.6931945Z ##[error]Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log.
strix Run Strix (quick) 2026-08-23T17:33:25.6942301Z ##[error]Process completed with exit code 1.
Strix model attempt and finding summary
strix Run Strix (quick) 2026-08-23T16:38:22.6842014Z ^[[36;1m# LLM-backend-unavailable outcomes (GitHub Models "Too many requests"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6853454Z ^[[36;1mbackend_unavailable_signal='RateLimitError|Too many requests\. For more on scraping GitHub|exceeded your current quota|insufficient_quota|billing details|"status"[[:space:]]*:[[:space:]]*"RESOURCE_EXHAUSTED"|tokens_limit_reached|Request body too large|Max size:[[:space:]]*[0-9]+[[:space:]]+tokens|Error code:[[:space:]]*413|LLM CONNECTION FAILED|Could not establish connection to the language model|LLM warm-up failed|Configured model and fallback models were unavailable|Configured Vertex model and fallback models were unavailable|emitted provider infrastructure or failure-signal output|before provider infrastructure failure|litellm(\.exceptions)?\.NotFoundError[^[:cntrl:]]*Nvidia_nimException[^[:cntrl:]]*Error code:[[:space:]]*404|Error during penetration test: loginAsGuest failed after [0-9]+ attempts: curl exit 7: curl: \(7\) Failed to connect to 127\.0\.0\.1 port 48080'^[[0m
strix Run Strix (quick) 2026-08-23T16:39:46.4527751Z │ LLM CONNECTION FAILED │
strix Run Strix (quick) 2026-08-23T16:39:46.4532821Z │ Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error │
strix Run Strix (quick) 2026-08-23T16:39:46.4982134Z Strix run failed for model 'nvidia_nim/nvidia/nemotron-3-super-120b-a12b' after 83s (exit code 1).
strix Run Strix (quick) 2026-08-23T17:12:59.8212981Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix Run Strix (quick) 2026-08-23T17:12:59.8263695Z raise RateLimitError(
strix Run Strix (quick) 2026-08-23T17:12:59.8264975Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix Run Strix (quick) 2026-08-23T17:12:59.8285846Z openai.RateLimitError: Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix Run Strix (quick) 2026-08-23T17:12:59.8335250Z raise RateLimitError(
strix Run Strix (quick) 2026-08-23T17:12:59.8336285Z [REDACTED]: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error code: 429 - {'status': 429, 'title': 'Too Many Requests'}
strix Run Strix (quick) 2026-08-23T17:12:59.8339581Z │ Model nvidia_nim/nvidia/nemotron-3-super-120b-a12b │
strix Run Strix (quick) 2026-08-23T17:12:59.8340105Z │ Vulnerabilities 0 │
strix Run Strix (quick) 2026-08-23T17:12:59.8346521Z │ Vulnerabilities 0 (No exploitable vulnerabilities detected) │
strix Run Strix (quick) 2026-08-23T17:14:05.9320798Z │ LLM CONNECTION FAILED │
strix Run Strix (quick) 2026-08-23T17:14:05.9325692Z │ Error: litellm.RateLimitError: RateLimitError: Nvidia_nimException - Error │
strix Run Strix (quick) 2026-08-23T17:14:05.9850557Z Strix run failed for model 'nvidia_nim/nvidia/nemotron-3-super-120b-a12b' after 6s (exit code 1).
strix Run Strix (quick) 2026-08-23T17:14:06.1448378Z Primary model unavailable; retrying with fallback 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5'.
strix Run Strix (quick) 2026-08-23T17:33:21.0301286Z │ Model nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5 │
strix Run Strix (quick) 2026-08-23T17:33:21.0302009Z │ Vulnerabilities 0 │
strix Run Strix (quick) 2026-08-23T17:33:21.0363851Z │ Vulnerabilities 0 (No exploitable vulnerabilities detected) │
strix Run Strix (quick) 2026-08-23T17:33:21.2990889Z Strix fallback model 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix Run Strix (quick) 2026-08-23T17:33:21.3036554Z Primary model unavailable; retrying with fallback 'openai-direct/gpt-5.6-luna'.
strix Run Strix (quick) 2026-08-23T17:33:25.3586986Z │ LLM CONNECTION FAILED │
strix Run Strix (quick) 2026-08-23T17:33:25.4463192Z Strix run failed for model 'openai-direct/gpt-5.6-luna' after 4s (exit code 1).
strix Run Strix (quick) 2026-08-23T17:33:25.6645607Z Strix fallback model 'openai-direct/gpt-5.6-luna' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
No Strix vulnerability report windows were detected in the failed log.
Failed log excerpt
strix Run Strix (quick) 2026-08-23T16:38:22.6837677Z ##[group]Run budget_suffix="TIME""OUT"
strix Run Strix (quick) 2026-08-23T16:38:22.6838086Z ^[[36;1mbudget_suffix="TIME""OUT"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6838372Z ^[[36;1mprocess_budget_seconds="5400"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6838689Z ^[[36;1mexport "LLM_${budget_suffix}=900"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6839059Z ^[[36;1mexport "STRIX_MEMORY_COMPRESSOR_${budget_suffix}=300"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6839550Z ^[[36;1mexport "STRIX_PROCESS_${budget_suffix}_SECONDS=$process_budget_seconds"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6840057Z ^[[36;1mexport "STRIX_TOTAL_${budget_suffix}_SECONDS=5700"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6840393Z ^[[36;1m^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6840719Z ^[[36;1m# Capture the gate exit code plus its console output. The gate returns^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6841213Z ^[[36;1m# exit 1 both for genuine blocking vulnerabilities AND for^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6842014Z ^[[36;1m# LLM-backend-unavailable outcomes (GitHub Models "Too many requests"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6842533Z ^[[36;1m# rate limits, OpenAI quota starvation, 413 tokens_limit_reached,^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6843054Z ^[[36;1m# connection/warm-up failures, and scanner ModelBehaviorError) that^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6843559Z ^[[36;1m# could not complete a scan. Provider failure is typed infrastructure^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6844080Z ^[[36;1m# evidence, but remains non-passing because no authoritative complete^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6844499Z ^[[36;1m# vulnerability result exists.^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6844856Z ^[[36;1mstrix_run_log="$RUNNER_TEMP/strix_gate_console.log"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6845189Z ^[[36;1mstrix_rc=0^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6845401Z ^[[36;1mset +e^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6845680Z ^[[36;1mbash "$TRUSTED_STRIX_GATE" 2>&1 | tee "$strix_run_log"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6846030Z ^[[36;1mstrix_rc="${PIPESTATUS[0]}"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6846300Z ^[[36;1mset -e^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6846503Z ^[[36;1m^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6846708Z ^[[36;1mif [ "$strix_rc" -eq 0 ]; then^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6846979Z ^[[36;1m exit 0^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6847184Z ^[[36;1mfi^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6847375Z ^[[36;1m^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6847690Z ^[[36;1m# Preserve configuration failures (exit 2) and any unexpected exit^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6848197Z ^[[36;1m# code as hard failures — only the scan-failure code (1) can be an^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6848662Z ^[[36;1m# infrastructure/backend-unavailability outcome.^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6849013Z ^[[36;1mif [ "$strix_rc" -ne 1 ]; then^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6849285Z ^[[36;1m exit "$strix_rc"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6849515Z ^[[36;1mfi^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6849704Z ^[[36;1m^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6850010Z ^[[36;1m# Recognized signals that the LLM backend was unavailable / starved.^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6853454Z ^[[36;1mbackend_unavailable_signal='RateLimitError|Too many requests\. For more on scraping GitHub|exceeded your current quota|insufficient_quota|billing details|"status"[[:space:]]*:[[:space:]]*"RESOURCE_EXHAUSTED"|tokens_limit_reached|Request body too large|Max size:[[:space:]]*[0-9]+[[:space:]]+tokens|Error code:[[:space:]]*413|LLM CONNECTION FAILED|Could not establish connection to the language model|LLM warm-up failed|Configured model and fallback models were unavailable|Configured Vertex model and fallback models were unavailable|emitted provider infrastructure or failure-signal output|before provider infrastructure failure|litellm(\.exceptions)?\.NotFoundError[^[:cntrl:]]*Nvidia_nimException[^[:cntrl:]]*Error code:[[:space:]]*404|Error during penetration test: loginAsGuest failed after [0-9]+ attempts: curl exit 7: curl: \(7\) Failed to connect to 127\.0\.0\.1 port 48080'^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6856882Z ^[[36;1mmodel_behavior_error_signal='(^|[^A-Za-z0-9_])(agents|pydantic_ai|strix)(\.[A-Za-z_][A-Za-z0-9_]*)*\.ModelBehaviorError([^A-Za-z0-9_]|$)'^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6857798Z ^[[36;1m# Any evidence that a vulnerability was actually reported. Its presence^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6858321Z ^[[36;1m# forces a hard failure so real findings are NEVER downgraded. Keep the^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6858839Z ^[[36;1m# severity branch anchored away from identifiers so environment lines^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6859495Z ^[[36;1m# such as STRIX_FAIL_ON_MIN_SEVERITY do not look like findings.^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6860089Z ^[[36;1mreported_vulnerability_signal='Vulnerabilities[[:space:]]+[1-9]|(^|[^A-Za-z0-9_])severity[[:space:]]*:'^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6860592Z ^[[36;1m^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6860900Z ^[[36;1m# An earlier out-of-scope/below-threshold finding may already have^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6861385Z ^[[36;1m# been exempted by the trusted gate. Classify a later provider^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6862161Z ^[[36;1m# outage from the tail after the last continuation marker, but keep^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6862588Z ^[[36;1m# that incomplete later scan non-passing.^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6862963Z ^[[36;1mstrix_neutralization_scope_log="$strix_run_log"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6863401Z ^[[36;1mif grep -Fq 'allowing pipeline continuation' "$strix_run_log"; then^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6863926Z ^[[36;1m strix_neutralization_scope_log="$RUNNER_TEMP/strix_gate_console_tail.log"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6864550Z ^[[36;1m awk '/allowing pipeline continuation/{buf=""; next} {buf=buf $0 "\n"} END{printf "%s", buf}' \^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6865096Z ^[[36;1m "$strix_run_log" > "$strix_neutralization_scope_log"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6865431Z ^[[36;1mfi^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6865623Z ^[[36;1m^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6865942Z ^[[36;1m# Classify provider/backend exhaustion only when no vulnerability^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6866436Z ^[[36;1m# finding was emitted. Classification improves diagnosis; it never^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6866911Z ^[[36;1m# converts an incomplete scan into passing security evidence.^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6867437Z ^[[36;1mif ( grep -Eiq "$backend_unavailable_signal" "$strix_neutralization_scope_log" \^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6868062Z ^[[36;1m || grep -Eq "$model_behavior_error_signal" "$strix_neutralization_scope_log" ) \^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6868676Z ^[[36;1m && ! grep -Eiq "$reported_vulnerability_signal" "$strix_neutralization_scope_log"; then^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6869945Z ^[[36;1m echo "::error title=STRIX_PROVIDER_UNAVAILABLE::Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log."^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6871049Z ^[[36;1m exit "$strix_rc"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6871284Z ^[[36;1mfi^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6871715Z ^[[36;1m^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6872261Z ^[[36;1mecho "Strix reported security findings or failed for a non-backend reason; failing the required check (gate exit ${strix_rc})." >&2^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6872867Z ^[[36;1mexit "$strix_rc"^[[0m
strix Run Strix (quick) 2026-08-23T16:38:22.6908333Z shell: /usr/bin/bash -e {0}
strix Run Strix (quick) 2026-08-23T16:38:22.6908612Z env:
strix Run Strix (quick) 2026-08-23T16:38:22.6908837Z FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
strix Run Strix (quick) 2026-08-23T16:38:22.6909211Z pythonLocation: /opt/hostedtoolcache/Python/3.13.15/x64
strix Run Strix (quick) 2026-08-23T16:38:22.6909662Z PKG_CONFIG_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/lib/pkgconfig
strix Run Strix (quick) 2026-08-23T16:38:22.6910109Z Python_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
strix Run Strix (quick) 2026-08-23T16:38:22.6910523Z Python2_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
strix Run Strix (quick) 2026-08-23T16:38:22.6910932Z Python3_ROOT_DIR: /opt/hostedtoolcache/Python/3.13.15/x64
strix Run Strix (quick) 2026-08-23T16:38:22.6911352Z LD_LIBRARY_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/lib
strix Run Strix (quick) 2026-08-23T16:38:22.6912135Z TRUSTED_STRIX_SOURCE: /home/runner/work/.github/.github/trusted-strix-source
strix Run Strix (quick) 2026-08-23T16:38:22.6912770Z TRUSTED_STRIX_GATE: /home/runner/work/.github/.github/trusted-strix-source/scripts/ci/strix_quick_gate.sh
strix Run Strix (quick) 2026-08-23T16:38:22.6913533Z TRUSTED_STRIX_GATE_TEST: /home/runner/work/.github/.github/trusted-strix-source/scripts/ci/test_strix_quick_gate.sh
strix Run Strix (quick) 2026-08-23T16:38:22.6914546Z TRUSTED_STRIX_REQUIRED_SMOKE: /home/runner/work/.github/.github/trusted-strix-source/scripts/ci/strix_required_workflow_smoke.sh
strix Run Strix (quick) 2026-08-23T16:38:22.6915212Z TRUSTED_WORKSPACE: /home/runner/work/_temp/trusted-workspace
strix Run Strix (quick) 2026-08-23T16:38:22.6915806Z STRIX_EXECUTABLE_PATH: /opt/hostedtoolcache/Python/3.13.15/x64/bin/strix
strix Run Strix (quick) 2026-08-23T16:38:22.6916274Z STRIX_EXECUTABLE_ROOT: /opt/hostedtoolcache/Python/3.13.15/x64/bin
strix Run Strix (quick) 2026-08-23T16:38:22.6916794Z STRIX_EXECUTABLE_SHA256: d2dd9753453674e0081508a08d869e7b629c15f11b70294b980033272734f073
strix Run Strix (quick) 2026-08-23T16:38:22.6917295Z LLM_API_KEY_FILE: [REDACTED]
strix Run Strix (quick) 2026-08-23T16:38:22.6917687Z LLM_API_BASE_FILE: /home/runner/work/_temp/llm_api_base.txt
strix Run Strix (quick) 2026-08-23T16:38:22.6918156Z STRIX_GITHUB_MODELS_KEY_FILE: /home/runner/work/_temp/github_models_fallback_key.txt
strix Run Strix (quick) 2026-08-23T16:38:22.6918714Z STRIX_GITHUB_MODELS_API_BASE_FILE: /home/runner/work/_temp/github_models_api_base.txt
strix Run Strix (quick) 2026-08-23T16:38:22.6919186Z STRIX_LLM_FILE: /home/runner/work/_temp/strix_llm.txt
strix Run Strix (quick) 2026-08-23T16:38:22.6919562Z STRIX_REPO_ROOT: /home/runner/work/_temp/trusted-workspace
strix Run Strix (quick) 2026-08-23T16:38:22.6919907Z STRIX_LLM_DEFAULT_PROVIDER: nvidia_nim
... truncated 592 middle log lines ...
strix Run Strix (quick) 2026-08-23T17:33:21.0337370Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0337943Z │ ## SSRF Protections │
strix Run Strix (quick) 2026-08-23T17:33:21.0338479Z │ The `wait_for_url` function in `sandboxed_web_e2e.py` implements robust │
strix Run Strix (quick) 2026-08-23T17:33:21.0339113Z │ validation: │
strix Run Strix (quick) 2026-08-23T17:33:21.0339661Z │ - **Host Check**: Blocks external hosts not in `localhost` or `127.0.0.1` │
strix Run Strix (quick) 2026-08-23T17:33:21.0340267Z │ ranges. │
strix Run Strix (quick) 2026-08-23T17:33:21.0340847Z │ - **Allowed Redirects**: Permits loopback addresses but blocks external │
strix Run Strix (quick) 2026-08-23T17:33:21.0341590Z │ redirection. │
strix Run Strix (quick) 2026-08-23T17:33:21.0342144Z │ - **Test Coverage**: `test_ssrf.py` and `test_ssrf2.py` contain test cases │
strix Run Strix (quick) 2026-08-23T17:33:21.0342862Z │ verifying this logic. │
strix Run Strix (quick) 2026-08-23T17:33:21.0343306Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0343862Z │ **Gaps Identified:** │
strix Run Strix (quick) 2026-08-23T17:33:21.0344407Z │ - `test_ssrf3.py` was not found, leaving potential edge cases (e.g., IPv6 │
strix Run Strix (quick) 2026-08-23T17:33:21.0345085Z │ representations) unverified. │
strix Run Strix (quick) 2026-08-23T17:33:21.0345569Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0346063Z │ ## SQL Injection Review │
strix Run Strix (quick) 2026-08-23T17:33:21.0346701Z │ No unsafe SQL query construction was observed in the test files. The files │
strix Run Strix (quick) 2026-08-23T17:33:21.0347365Z │ focus on network validation (SSRF) rather than data layer security. │
strix Run Strix (quick) 2026-08-23T17:33:21.0348002Z │ Recommendations include reviewing production code for ORM usage and │
strix Run Strix (quick) 2026-08-23T17:33:21.0348694Z │ parameterized queries. │
strix Run Strix (quick) 2026-08-23T17:33:21.0349150Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0349628Z │ # Recommendations │
strix Run Strix (quick) 2026-08-23T17:33:21.0350170Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0350595Z │ # Recommendations │
strix Run Strix (quick) 2026-08-23T17:33:21.0351391Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0352514Z │ 1. **Complete SSRF Test Coverage** │
strix Run Strix (quick) 2026-08-23T17:33:21.0353555Z │ - Implement `test_ssrf3.py` to address IPv6 representations and other │
strix Run Strix (quick) 2026-08-23T17:33:21.0354803Z │ edge cases. │
strix Run Strix (quick) 2026-08-23T17:33:21.0355341Z │ 2. **Database Security Review** │
strix Run Strix (quick) 2026-08-23T17:33:21.0355876Z │ - Conduct a thorough review of production code for: │
strix Run Strix (quick) 2026-08-23T17:33:21.0356432Z │ - ORM usage patterns (e.g., Django ORM, SQLAlchemy) │
strix Run Strix (quick) 2026-08-23T17:33:21.0356975Z │ - Parameterized queries vs. string interpolation │
strix Run Strix (quick) 2026-08-23T17:33:21.0357515Z │ - Input sanitization in data processing layers │
strix Run Strix (quick) 2026-08-23T17:33:21.0358058Z │ 3. **Enhanced Input Validation** │
strix Run Strix (quick) 2026-08-23T17:33:21.0358585Z │ - Ensure all user inputs undergo strict validation and sanitization │
strix Run Strix (quick) 2026-08-23T17:33:21.0359137Z │ before use in security-sensitive contexts. │
strix Run Strix (quick) 2026-08-23T17:33:21.0359813Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0360205Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0360655Z ╰──────────────────────────────────────────────────────────────────────────────╯
strix Run Strix (quick) 2026-08-23T17:33:21.0360893Z
strix Run Strix (quick) 2026-08-23T17:33:21.0360900Z
strix Run Strix (quick) 2026-08-23T17:33:21.0360904Z
strix Run Strix (quick) 2026-08-23T17:33:21.0361144Z ╭─ STRIX ──────────────────────────────────────────────────────────────────────╮
strix Run Strix (quick) 2026-08-23T17:33:21.0361847Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0362311Z │ Penetration test completed │
strix Run Strix (quick) 2026-08-23T17:33:21.0362774Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0363277Z │ Target /tmp/strix-runtime.EK3bPv/pr-scopes/strix-pr-scope.fTiVko │
strix Run Strix (quick) 2026-08-23T17:33:21.0363851Z │ Vulnerabilities 0 (No exploitable vulnerabilities detected) │
strix Run Strix (quick) 2026-08-23T17:33:21.0364342Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0364799Z │ Input Tokens 1.4M · Output Tokens 20.5K │
strix Run Strix (quick) 2026-08-23T17:33:21.0365244Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0365652Z │ Output │
strix Run Strix (quick) 2026-08-23T17:33:21.0366162Z │ /tmp/strix-runtime.EK3bPv/scan-cwd/strix_runs/strix-pr-scope-ftivko_8dda │
strix Run Strix (quick) 2026-08-23T17:33:21.0366642Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0367261Z │ View strix view strix-pr-scope-ftivko_8dda │
strix Run Strix (quick) 2026-08-23T17:33:21.0368144Z │ │
strix Run Strix (quick) 2026-08-23T17:33:21.0369004Z ╰──────────────────────────────────────────────────────────────────────────────╯
strix Run Strix (quick) 2026-08-23T17:33:21.0369462Z
strix Run Strix (quick) 2026-08-23T17:33:21.0369738Z strix.ai · docs.strix.ai · discord.gg/strix-ai
strix Run Strix (quick) 2026-08-23T17:33:21.0370077Z
strix Run Strix (quick) 2026-08-23T17:33:21.0846918Z Strix run emitted provider infrastructure or failure-signal output; failing closed.
strix Run Strix (quick) 2026-08-23T17:33:21.1240863Z No Strix vulnerability report artifact was produced; log-only severity markers are incomplete evidence, so the scan is failing closed.
strix Run Strix (quick) 2026-08-23T17:33:21.1366011Z INFO: Unable to compute PR merge base; falling back to direct base/head diff for changed file enumeration.
strix Run Strix (quick) 2026-08-23T17:33:21.2990889Z Strix fallback model 'nvidia_nim/nvidia/llama-3.3-nemotron-super-49b-v1.5' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix Run Strix (quick) 2026-08-23T17:33:21.3036554Z Primary model unavailable; retrying with fallback 'openai-direct/gpt-5.6-luna'.
strix Run Strix (quick) 2026-08-23T17:33:25.3584411Z
strix Run Strix (quick) 2026-08-23T17:33:25.3584510Z
strix Run Strix (quick) 2026-08-23T17:33:25.3585503Z ╭─ STRIX ──────────────────────────────────────────────────────────────────────╮
strix Run Strix (quick) 2026-08-23T17:33:25.3586396Z │ │
strix Run Strix (quick) 2026-08-23T17:33:25.3586986Z │ LLM CONNECTION FAILED │
strix Run Strix (quick) 2026-08-23T17:33:25.3587541Z │ │
strix Run Strix (quick) 2026-08-23T17:33:25.3588181Z │ Could not establish connection to the language model. │
strix Run Strix (quick) 2026-08-23T17:33:25.3588929Z │ Please check your configuration and try again. │
strix Run Strix (quick) 2026-08-23T17:33:25.3589561Z │ │
strix Run Strix (quick) 2026-08-23T17:33:25.3590250Z │ Error: litellm.BadRequestError: LLM Provider NOT provided. Pass in the LLM │
strix Run Strix (quick) 2026-08-23T17:33:25.3591015Z │ provider you are trying to call. You passed │
strix Run Strix (quick) 2026-08-23T17:33:25.3592047Z │ model=openai-direct/gpt-5.6-luna │
strix Run Strix (quick) 2026-08-23T17:33:25.3592827Z │ Pass model as E.g. For 'Huggingface' inference endpoints pass in │
strix Run Strix (quick) 2026-08-23T17:33:25.3593603Z │ `completion(model='huggingface/starcoder',..)` Learn more: │
strix Run Strix (quick) 2026-08-23T17:33:25.3594383Z │ https://docs.litellm.ai/docs/providers │
strix Run Strix (quick) 2026-08-23T17:33:25.3595018Z │ │
strix Run Strix (quick) 2026-08-23T17:33:25.3595618Z ╰──────────────────────────────────────────────────────────────────────────────╯
strix Run Strix (quick) 2026-08-23T17:33:25.3595936Z
strix Run Strix (quick) 2026-08-23T17:33:25.4463192Z Strix run failed for model 'openai-direct/gpt-5.6-luna' after 4s (exit code 1).
strix Run Strix (quick) 2026-08-23T17:33:25.4847342Z No Strix vulnerability report artifact was produced; log-only severity markers are incomplete evidence, so the scan is failing closed.
strix Run Strix (quick) 2026-08-23T17:33:25.4968874Z INFO: Unable to compute PR merge base; falling back to direct base/head diff for changed file enumeration.
strix Run Strix (quick) 2026-08-23T17:33:25.6645607Z Strix fallback model 'openai-direct/gpt-5.6-luna' emitted provider infrastructure or failure-signal output; trying next configured fallback if available.
strix Run Strix (quick) 2026-08-23T17:33:25.6667453Z Strix reported zero vulnerabilities before provider infrastructure failure; failing closed because provider infrastructure failures are not clean scan evidence.
strix Run Strix (quick) 2026-08-23T17:33:25.6931945Z ##[error]Strix could not complete authoritative vulnerability analysis because its provider/backend was unavailable (rate limit, token cap, connection, warm-up, or model-behavior failure). See the strix-reports artifact and run log.
strix Run Strix (quick) 2026-08-23T17:33:25.6942301Z ##[error]Process completed with exit code 1.
Changed-File Evidence Map
flowchart LR
PR["PR changed files"] --> Evidence["OpenCode bounded evidence"]
Evidence --> S1["Changed file: CHANGELOG.md"]
S1 --> I1["repository behavior"]
I1 --> R1["Review risk: Changed file: CHANGELOG.md"]
R1 --> V1["required checks"]
Evidence --> S2["Docs: sandboxed-web-readiness-loopback-boundary.md"]
S2 --> I2["operator or user guidance"]
I2 --> R2["Review risk: Docs: sandboxed-web-readiness-loopback-boundary.md"]
R2 --> V2["docs review"]
Evidence --> S3["CI script: sandboxed_web_e2e.py"]
S3 --> I3["review and security gate shell path"]
I3 --> R3["Review risk: CI script: sandboxed_web_e2e.py"]
R3 --> V3["bash -n plus Strix self-test"]
Evidence --> S4["Test: test_sandboxed_web_e2e.py"]
S4 --> I4["regression suite"]
I4 --> R4["Review risk: Test: test_sandboxed_web_e2e.py"]
R4 --> V4["targeted test run"]
Problem
sandboxed_web_e2e.pyaccepted any HTTP(S) hostname supplied through a readiness URL. A review run could therefore poll an external service or a link-local metadata endpoint instead of the sandboxed application.Repair
localhostor addresses that Python'sipaddressstandard library classifies as loopback127.0.0.20.0.0.0, public hosts, link-local metadata addresses, and non-HTTP(S) schemesdocs/doctoring/sandboxed-web-readiness-loopback-boundary.mdExact-head verification
cadd69536062f400e98405fbab6e3e558080741eReviewers should verify that future readiness destinations remain loopback-only; do not add individual non-loopback exceptions.