Repository navigation
🛡️ Sentinel: Fix symlink hijacking in telemetry stream log handlers - #679
Conversation
Check os.path.islink(TELEMETRY_LOG) before reading, writing, or changing file permissions on telemetry log files to prevent symlink hijacking vulnerabilities. Add unit test coverage in test_telemetry_optimized.py.
|
👋 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. |
|
Mention Blocks like a regular teammate with your question or request: @blocks review this pull request Run |
|
Deployment failed for project help-wanted-dash with the following error: Learn More: https://vercel.com/timerloggedout-5184s-projects?upgradeToPro=build-rate-limit |
|
Deployment failed for project help-wanted-oversight with the following error: Learn More: https://vercel.com/timerloggedout-5184s-projects?upgradeToPro=build-rate-limit |
ECC Tools / Security EvidenceCommit: Security evidence gate passed (success) No security-sensitive scanner-evidence gap detected. Mode: enforce Scanned 5 changed file(s). No missing scanner-evidence signal was detected. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
|
Deployment failed for project mcp-hub with the following error: Learn More: https://vercel.com/timerloggedout-5184s-projects?upgradeToPro=build-rate-limit |
ECC Tools / PR Risk TaxonomyCommit: PR taxonomy clear (success) Scanned 5 changed file(s). No taxonomy bucket signals were detected. Scanned 5 changed file(s). No PR taxonomy bucket signals were detected. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Reference Set ReadinessCommit: Reference set readiness gaps detected (neutral) Reference evidence present for 0/7 areas (0%) across 5 changed file(s). This check is based on files changed in this PR. Repository-level readiness is still reported by
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Hosted Promotion ReadinessCommit: Hosted promotion readiness passed (success) No hosted promotion evidence gaps detected across 5 changed file(s); 0 corpus scenarios had matching evidence. This check compares PR file changes against the evaluator/RAG promotion corpus in No evaluator corpus scenarios matched this PR. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
|
Deployment failed for project termux-monorepo with the following error: Learn More: https://vercel.com/timerloggedout-5184s-projects?upgradeToPro=build-rate-limit |
PR Change Effectiveness LedgerMeasured head:
Interpretation: commit count is context, not quality. Empty commits are explicitly measured, not silently treated as productive work. Gross churn describes work performed across history; the final base→head diff describes what remains. Review/comment/check evidence must be evaluated separately and tied to this measured head SHA. State: 🟢 EFFECTIVE_DIFF_PRESENT; Generated: 2026-09-21T01:22:42Z |
|
ECC App activity — dual-gate merges; review skills/hooks before merge. |
Acknowledged. |
Check os.path.islink(TELEMETRY_LOG) before reading, writing, or changing file permissions on telemetry log files to prevent symlink hijacking vulnerabilities. Add unit test coverage in test_telemetry_optimized.py.
ECC Tools / Security EvidenceCommit: Security evidence gate passed (success) No security-sensitive scanner-evidence gap detected. Mode: enforce Scanned 5 changed file(s). No missing scanner-evidence signal was detected. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / PR Risk TaxonomyCommit: PR taxonomy clear (success) Scanned 5 changed file(s). No taxonomy bucket signals were detected. Scanned 5 changed file(s). No PR taxonomy bucket signals were detected. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Reference Set ReadinessCommit: Reference set readiness gaps detected (neutral) Reference evidence present for 0/7 areas (0%) across 5 changed file(s). This check is based on files changed in this PR. Repository-level readiness is still reported by
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Deployment failed for project termux-monorepo with the following error: Learn More: https://vercel.com/timerloggedout-5184s-projects?upgradeToPro=build-rate-limit |
ECC Tools / Hosted Promotion ReadinessCommit: Hosted promotion readiness passed (success) No hosted promotion evidence gaps detected across 5 changed file(s); 0 corpus scenarios had matching evidence. This check compares PR file changes against the evaluator/RAG promotion corpus in No evaluator corpus scenarios matched this PR. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
|
OPERATOR HOLD/WAIT: mergeable_state=unstable; base SHA lag vs live master |
Acknowledged operator hold/wait notice. |
ECC Tools / Security EvidenceCommit: Security evidence gate passed (success) No security-sensitive scanner-evidence gap detected. Mode: enforce Scanned 5 changed file(s). No missing scanner-evidence signal was detected. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / PR Risk TaxonomyCommit: PR taxonomy clear (success) Scanned 5 changed file(s). No taxonomy bucket signals were detected. Scanned 5 changed file(s). No PR taxonomy bucket signals were detected. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Reference Set ReadinessCommit: Reference set readiness gaps detected (neutral) Reference evidence present for 0/7 areas (0%) across 5 changed file(s). This check is based on files changed in this PR. Repository-level readiness is still reported by
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
|
Deployment failed for project help-wanted-dash with the following error: Learn More: https://vercel.com/timerloggedout-5184s-projects?upgradeToPro=build-rate-limit |
ECC Tools / Hosted Promotion ReadinessCommit: Hosted promotion readiness passed (success) No hosted promotion evidence gaps detected across 5 changed file(s); 0 corpus scenarios had matching evidence. This check compares PR file changes against the evaluator/RAG promotion corpus in No evaluator corpus scenarios matched this PR. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
This PR hardens telemetry log stream handling against symlink hijacking across
src/telemetry.py,termux-multi-agent/src/telemetry.py, andtermux-multi-agent/dashboard.py.🚨 Severity
HIGH
💡 Vulnerability
TermuxTelemetryLogger.notifyopenedTELEMETRY_LOG("agent_telemetry_stream.json") in append mode and appliedos.chmod(..., 0o600)without checking if the file was a symbolic link. A local attacker could pre-create a symlink pointing to an arbitrary target file, causing telemetry logging to overwrite or alter permissions on sensitive target files.🔧 Fix
os.path.islink(TELEMETRY_LOG)inTermuxTelemetryLogger.notifybefore opening, writing, or changing permissions on the log file.os.path.islink(TELEMETRY_LOG)inread_latest_telemetryindashboard.pybefore reading the log file.test_telemetry_symlink_hijacking_preventionintests/test_telemetry_optimized.py.✅ Verification
Ran
PYTHONPATH=termux-multi-agent python3 -m pytest tests/test_telemetry_optimized.pyand full security test suites. All 38 tests passed.PR created automatically by Jules for task 17545578022270580346 started by @timerloggedout-spec