{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-03ba5918cbfbb8be", "name": "Possibly dead Python function: check_channel_request", "shortDescription": {"text": "Possibly dead Python function: check_channel_request"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e64c4657120e36d0", "name": "Possibly dead Python function: check_auth_password", "shortDescription": {"text": "Possibly dead Python function: check_auth_password"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3cec31e65b735372", "name": "Possibly dead Python function: check_auth_publickey", "shortDescription": {"text": "Possibly dead Python function: check_auth_publickey"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9278c7e44c03792d", "name": "Possibly dead Python function: check_channel_shell_request", "shortDescription": {"text": "Possibly dead Python function: check_channel_shell_request"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7f5a2b876ffca35c", "name": "Possibly dead Python function: check_channel_pty_request", "shortDescription": {"text": "Possibly dead Python function: check_channel_pty_request"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-717635d9ee1e3b84", "name": "Possibly dead Python function: check_channel_exec_request", "shortDescription": {"text": "Possibly dead Python function: check_channel_exec_request"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e0a4c3b77d64eadf", "name": "Possibly dead Python function: do_POST", "shortDescription": {"text": "Possibly dead Python function: do_POST"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-384205f18dad00d8", "name": "Possibly dead Python function: do_GET", "shortDescription": {"text": "Possibly dead Python function: do_GET"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c6f2b27e487cc21c", "name": "Possibly dead Python function: log_message", "shortDescription": {"text": "Possibly dead Python function: log_message"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c20b2dbd009d14a3", "name": "Privileged port 50 in use", "shortDescription": {"text": "Privileged port 50 in use"}, "fullDescription": {"text": "Port 50 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-482743e24e16acb9", "name": "Privileged port 21 in use", "shortDescription": {"text": "Privileged port 21 in use"}, "fullDescription": {"text": "Port 21 is privileged (<1024). Make sure the service runs with the right caps or front it with a non-privileged port via a load balancer."}, "properties": {"scanner": "scanner-primary", "layer": "network", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c89024f36703f96e", "name": "Insecure pattern 'direct_innerhtml_assignment' in deploy/sentinel/receiver/sentinel_receiver.py:233", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deploy/sentinel/receiver/sentinel_receiver.py:233"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ea3b5e389d8c9c0f", "name": "Low test-to-source ratio", "shortDescription": {"text": "Low test-to-source ratio"}, "fullDescription": {"text": "1 tests / 10 src (ratio 0.10)."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 41 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4817e4714b1426b6", "name": "Commented-code block (5 lines) in logger.py:65", "shortDescription": {"text": "Commented-code block (5 lines) in logger.py:65"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nhoneypots/ftp_honeypot.py:start, honeypots/ssh_honeypot.py:start\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1d1d10ff7f2778ed", "name": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:55", "shortDescription": {"text": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:55"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-0b633ff3d0bb052e", "name": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:56", "shortDescription": {"text": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:56"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-62c111903b0006a9", "name": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:57", "shortDescription": {"text": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:57"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f1155edbbd68dcd6", "name": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:58", "shortDescription": {"text": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:58"}, "fullDescription": {"text": "Flask route declares POST/PUT/DELETE/PATCH methods without an auth decorator. Add `@login_required` (Flask-Login) or equivalent."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/24439"}, "properties": {"repository": "B0bTheSkull/honeynet", "repoUrl": "https://github.com/B0bTheSkull/honeynet", "branch": "main"}, "results": [{"ruleId": "scanner-03ba5918cbfbb8be", "level": "note", "message": {"text": "Possibly dead Python function: check_channel_request"}, "properties": {"repobilityId": "520ca4dfe4536544", "scanner": "scanner-primary", "fingerprint": "03ba5918cbfbb8be", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/ssh_honeypot.py:20"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e64c4657120e36d0", "level": "note", "message": {"text": "Possibly dead Python function: check_auth_password"}, "properties": {"repobilityId": "80100a35812c8110", "scanner": "scanner-primary", "fingerprint": "e64c4657120e36d0", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/ssh_honeypot.py:25"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3cec31e65b735372", "level": "note", "message": {"text": "Possibly dead Python function: check_auth_publickey"}, "properties": {"repobilityId": "9009434447be803d", "scanner": "scanner-primary", "fingerprint": "3cec31e65b735372", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/ssh_honeypot.py:36"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9278c7e44c03792d", "level": "note", "message": {"text": "Possibly dead Python function: check_channel_shell_request"}, "properties": {"repobilityId": "d457df39f2f1798f", "scanner": "scanner-primary", "fingerprint": "9278c7e44c03792d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/ssh_honeypot.py:49"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7f5a2b876ffca35c", "level": "note", "message": {"text": "Possibly dead Python function: check_channel_pty_request"}, "properties": {"repobilityId": "c3c2293470c1d1a0", "scanner": "scanner-primary", "fingerprint": "7f5a2b876ffca35c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/ssh_honeypot.py:53"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-717635d9ee1e3b84", "level": "note", "message": {"text": "Possibly dead Python function: check_channel_exec_request"}, "properties": {"repobilityId": "9e78da6ae90fc029", "scanner": "scanner-primary", "fingerprint": "717635d9ee1e3b84", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/ssh_honeypot.py:56"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e0a4c3b77d64eadf", "level": "note", "message": {"text": "Possibly dead Python function: do_POST"}, "properties": {"repobilityId": "53357410ca9379a9", "scanner": "scanner-primary", "fingerprint": "e0a4c3b77d64eadf", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/sentinel/receiver/sentinel_receiver.py:281"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-384205f18dad00d8", "level": "note", "message": {"text": "Possibly dead Python function: do_GET"}, "properties": {"repobilityId": "2d943bb45e4f13bd", "scanner": "scanner-primary", "fingerprint": "384205f18dad00d8", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/sentinel/receiver/sentinel_receiver.py:314"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c6f2b27e487cc21c", "level": "note", "message": {"text": "Possibly dead Python function: log_message"}, "properties": {"repobilityId": "965f3150b4af5b2e", "scanner": "scanner-primary", "fingerprint": "c6f2b27e487cc21c", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/sentinel/receiver/sentinel_receiver.py:325"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c20b2dbd009d14a3", "level": "warning", "message": {"text": "Privileged port 50 in use"}, "properties": {"repobilityId": "da61f654c07ea7a9", "scanner": "scanner-primary", "fingerprint": "c20b2dbd009d14a3", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/ftp_honeypot.py"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-482743e24e16acb9", "level": "warning", "message": {"text": "Privileged port 21 in use"}, "properties": {"repobilityId": "d920b7cd1b1a16dc", "scanner": "scanner-primary", "fingerprint": "482743e24e16acb9", "layer": "network", "severity": "medium", "confidence": 1.0, "tags": ["security", "ports"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/fix-access-and-reconfig.sh"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c89024f36703f96e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in deploy/sentinel/receiver/sentinel_receiver.py:233"}, "properties": {"repobilityId": "6233668e7337b505", "scanner": "scanner-primary", "fingerprint": "c89024f36703f96e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "deploy/sentinel/receiver/sentinel_receiver.py"}, "region": {"startLine": 233}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-ea3b5e389d8c9c0f", "level": "note", "message": {"text": "Low test-to-source ratio"}, "properties": {"repobilityId": "ef7b2552cc00a375", "scanner": "scanner-primary", "fingerprint": "ea3b5e389d8c9c0f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["tests"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "ad85683a4f6c6b93", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "3cad2909b3db966b", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-4817e4714b1426b6", "level": "none", "message": {"text": "Commented-code block (5 lines) in logger.py:65"}, "properties": {"repobilityId": "ac70341bcad9fa64", "scanner": "scanner-primary", "fingerprint": "4817e4714b1426b6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "b45b2cb542b354ba", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "5a744abdadcae011", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-1d1d10ff7f2778ed", "level": "error", "message": {"text": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:55"}, "properties": {"repobilityId": "2051816cb7b6fa83", "scanner": "scanner-primary", "fingerprint": "1d1d10ff7f2778ed", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/http_honeypot.py"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-0b633ff3d0bb052e", "level": "error", "message": {"text": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:56"}, "properties": {"repobilityId": "4a949d776122e2d0", "scanner": "scanner-primary", "fingerprint": "0b633ff3d0bb052e", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/http_honeypot.py"}, "region": {"startLine": 56}}}]}, {"ruleId": "scanner-62c111903b0006a9", "level": "error", "message": {"text": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:57"}, "properties": {"repobilityId": "e2b0d1563e370749", "scanner": "scanner-primary", "fingerprint": "62c111903b0006a9", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/http_honeypot.py"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-f1155edbbd68dcd6", "level": "error", "message": {"text": "Flask mutation route `login_attempt` without `@login_required` \u2014 honeypots/http_honeypot.py:58"}, "properties": {"repobilityId": "8de8491b04e170f6", "scanner": "scanner-primary", "fingerprint": "f1155edbbd68dcd6", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.flask.unauth_route"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "honeypots/http_honeypot.py"}, "region": {"startLine": 58}}}]}]}]}