2023 JFrog Security Research Report
2023 JFrog Security Research Report
........................................................
28-30
Authors Biographies ..................................................................................................................................................................................................
31
CVE Common Vulnerabilities and Exposures. A glossary JFrog The severity of the CVE, as defined by JFrog’s Security
that classifies vulnerabilities, managed by the NVD (a Severity Research team. The severity uses the following levels -
U.S government repository of standards). Used in this Low, Medium, High, Critical.
report to denote “A publicly-known vulnerability,
referred to by its unique ID such as CVE-2022-3602”.
CVSS Common Vulnerability Scoring System. A vulnerability Affected The number of artifacts present in JFrog’s Artifactory
severity score ranging from 0 to 10 (most severe), Artifacts
Cloud that have been found vulnerable to a specific
given to each CVE. The score reflects how hard the CVE. Based on anonymous usage statistics from the
vulnerability is to exploit and how much damage it JFrog Artifactory Cloud.
can cause once exploited. The score is meant to help
users decide which vulnerabilities are crucial to fix.
CNA CVE Numbering Authority. Groups that are authorized NVD The National Vulnerability Database (NVD) severity
by the CVE Program to assign CVE IDs to Severity rating of any CVE, officially defined by its CVSS
vulnerabilities and publish CVE Records within their according to the following ranges -
own specific scopes of coverage.
CVSS Range NVD Severity
0.0 None
0.1 - 3.9 Low
4.0 - 6.9 Medium
7.0 - 8.9 High
9.0 - 10.0 Critical
This report is designed to provide developers, DevOps engineers, true severity and publishes this information for the benefit of the
security researchers, and information security leaders with timely, community and all JFrog customers.
relevant insight on the security vulnerabilities aiming to inject This report is based on a sampling of the vulnerabilities most
risks into their software supply chains. The information provided often detected in the calendar year 2022 via anonymous usage
herein will help you make more informed decisions on how to statistics from the JFrog Platform.
potential impact of all known software vulnerabilities, to ensure Each vulnerability includes a summary of the commercial status
JFrog is in a unique position to detail the impact of security its impact on today’s enterprise systems. This should enable
vulnerabilities on software artifacts actually in use within today’s security teams to better evaluate if they are actually impacted by
FORTUNE 100 companies. Thus the JFrog Security Research team each issue. This analysis constructs the JFrog Security Research
compiled this first edition of the JFrog annual Critical Vulnerability severity rating for each of the top 10 most prevalent CVEs in 2022,
Exposures (CVEs) report providing an in-depth analysis of the top outlines the notable lessons learned from each, and offers
10 most prevalent vulnerabilities of 2022, their “true” severity guidance to help increase your security posture for 2023.
each. The vulnerabilities contained herein are sorted from high to In addition to each in-depth CVE assessment, this report provides
Methodology
which software components are likely to remain vulnerable in
The majority of vulnerabilities detailed in this report were not as The threat of the CVE may be misleading, if their CVSS rating is
easy to exploit as reported by public sources, and hence high and their real-world impact is negligible (which prompts
undeserving of their high NVD severity rating. Further analysis maintainers to ignore them).
Public severity ratings are overinflated since they ignore the In fact 64% of the top 50 CVEs received a lower JFrog Security
real-world impact of a specific CVE
Research severity rating, while 90% received a lower or equal
The CVSS impact metrics (Confidentiality, Integrity & Availability) severity.
will often be rated according to a theoretical “face value” without
considering the actual impact the attack has on real-world
systems. For example
26% JFrog Severity was equal
High
The discrepancy between public severity ratings and JFrog
Security research severity assessments can be clearly seen when
comparing the top 50 CVEs of 2022 - In most cases, the Medium
JFrog Security Research CVE severity assessment is lower than
the NVD severity rating, meaning oftentimes these vulnerabilities
Low
are being overhyped.
CVE Severity Rating - NVD vs JFrog NVD JFrog JFrog+NVD
Following are some suggestions to help developers, DevOps Even if the NVD’s score is higher and cause for alarm, we
engineers, security researchers, and information security leaders recommend trusting the CNA’s assessment and rating since the
combat the confusion caused by overly-hyped vulnerabilities in CNA will usually perform a deeper evaluation on the vulnerability.
2023:
Similar to how a patient would seek a second medical opinion Major Linux distributions such as Ubuntu and Red Hat have entire
before having major surgery, it’s wise to seek an alternate source security tracker teams that perform their own analysis of reported
of validation for any discovered CVE before setting a remediation vulnerabilities and provide their own severity score, regardless of
plan. There are several reputable sources, beyond the NVD, that whether the vulnerabilities have a CVE ID. Generally speaking, they
can be consulted before prioritizing the remediation of a specific determine their severity scores based on an assessment of the
vulnerability. These alternate sources include: context in which the vulnerability affects users of their distribution.
non-NVD CVSS scores
For example, a vulnerability
CVE-2022-1471 CVE-2022-29458
Vulnerabilities reported by may have critical security
CNAs other than the NVD will impact on a Windows-based
usually list both the NVD 9.8 8.3 environment, but have little to .
7 1 .
6 1
any CVEs.
https://access.redhat.com/security/cve/cve-2022-29458
Project
Security Tracker
https://httpd.apache.org/security/vulnerabilities_24.html
assign their own severity scores for each CVE, which is often
Nginx
https://nginx.org/en/security_advisories.html
different from the NVD severity rating for the same issue. For
example the following vulnerability in “curl” - OpenSSL
https://www.openssl.org/news/vulnerabilities.html
CVE-2022-27781 Django
https://docs.djangoproject.com/en/4.1/releases/security/
Curl
https://curl.se/docs/security.html
7.5 Node.js
https://nodejs.org/en/blog/
Spring framework
https://tanzu.vmware.com/security
Low High
CURL Project NIST: NVD
https://curl.se/docs/CVE-2022-27781.html https://nvd.nist.gov/vuln/detail/cve-2022-27781 2. For critical issues, take social media into account
real-world impact.
By the beginning of December, social chatter on CVE-2022-3602 had been reduced to less than 10 daily tweets, thus reflecting the real (very
low) criticality of this issue. When evaluating the severity of any CVE, we recommend consulting cvetrends.com, which validates Twitter's
filtered stream API by combining it with data from NIST's NVD, Reddit, and GitHub APIs.
https://cvetrends.com/
above, the vulnerability proliferation is calculated using JFrog Advanced Security augments JFrog Xray’s software
anonymous usage statistics from the JFrog Platform. Each
______________ composition analysis capabilities with new in-depth binary
vulnerability includes security scanning, allowing a whole new understanding of the
Impact Analysis - Summary of the vulnerability’s real-world security state of binaries, especially container images.
i ed Versions
F x 2.37.4
The readline library accepts an INPUTRC parameter as an
environment variable. Passing this environment variable causes
Impact Analysi readline to load the file in the chfn and chsh process, which is
This CVE showed up most frequently throughout the year, running as UID 0 (root setuid).
likely because it was reported to affect all versions of Debian, Parsing this file will lead to errors being printed to standard
an extremely popular Linux distribution output when reading lines that begin with certain strings such as
Unfixed due to unimportant urgency or potential of "-" and lines that do not contain an expected character. These
exploitatio error messages contain only parts of the file, which is the core of
In reality, most major distros are not affected by this the issue.
severity rating.
INPUTRC={attacker_controlled_file} chfn
Mitigation Options
Impact Denial-of-Service
Extremely widespread CVE since the maintainers did not fix the ncurses (new curses) is a programming library providing an
issue on all Debian version application programming interface (API) that allows the
Exploitation of this issue is extremely unlikely because ncurses programmer to write text-based user interfaces (TUI) in a terminal-
must be running on a client utility with an externally-controlled independent manner. It is a toolkit for developing "GUI-like"
file as input; and that client utility does not usually receive application software that runs under a terminal emulator.
external input
The denial of service (DoS) impact is minimal because crashing a In April 2022, a security researcher reported a bug found by a new
forked client process does not usually cause an issue with fuzzer being tested. A log of the crash with AddressSanitizer was
availability attached to the report. The vulnerability was labeled an Out-of-
Bounds Read that leads to a denial-of-service (DoS) and possibly
Data leakage is even more rare because the attacker must
unintended information disclosure.
extract the utility’s output file after launching the attack.
The JFrog Security Research team gave this vulnerability a Low Mitigation Options
severity rating.
No mitigation is available for this issue, other than upgrading the
vulnerable component.
The following reasons lower the issue's severity
The attacker must be able to control the contents of the
terminfo source file when the tic command is run, which is
a highly unlikely remote scenario.
tic -o /path/to/output/folder/ <TIC_SOURCE_FILEPATH>
The DoS impact is mitigated by the fact the only known
attack vector is running and crashing a forked process (tic),
which does not impact the parent process
The attacker must find a way to get the output file with the
leaked memory information, which is very unlikely.
Contextual Analysis
tinfo/read_entry.c file:
static void
convert_strings(char *buf, char **Strings, int count, int size, char *table)
int i;
char *p;
On [1], the Strings[i] variable is assigned using the buffer and
for (i = 0; i < count; i++) {
if (IS_NEG1(buf + 2 * i)) {
the i counter.
Strings[i] = ABSENT_STRING;
Strings[i] = ABSENT_STRING;
If the verification passes, it iterates on [3] over the string, until it
} else {
(no check that the index supplied to String[] is in-bounds).
if (VALID_STRING(Strings[i])) { [2]
break;
Strings[i] = ABSENT_STRING;
The JFrog Security Research team gave this vulnerability a Low Vulnerable Command-line Snippet
severity rating.
e2fsck -p -f {malicious_disc_image_file}
The attack must be performed locally (as it’s highly unlikely a No mitigation is available for this issue, other than upgrading the
remote service would use the e2fsck on externally supplied vulnerable component.
input), which limits the amount of attackers that are able to
exploit this issue
Vulnerability In-Depth Details
{
char *buf;
int entries;
char *cp;
errcode_t retval = 0;
int left;
int visit_num;
EXT2_CHECK_MAGIC(handle, EXT2_ET_MAGIC_EXTENT_HANDLE);
int flags;
return EXT2_ET_RO_FILSYS;
void *curr;
};
if (!handle->path)
return EXT2_ET_NO_CURRENT_NODE;
#ifdef DEBUG
&extent);
if (retval == 0) {
dbg_print_extent(0, &extent);
#endif
if (!path->curr)
return EXT2_ET_NO_CURRENT_NODE;
cp = path->curr;
if (path->left) { [1]
path->left--;
} else {
ix--;
path->curr = ix;
#4 + #5 CVE-2022-42003 / CVE-2022-42004
Impact Denial-of-Service
JFrog Security Research discovered that when the non-default
NVD Severity Rating High (CVSS 7.5) UNWRAP_SINGLE_VALUE_ARRAYS deserialization option is
JFrog Severity Rating Medium enabled, the deserialization of a deeply nested JSON array (via
calls to readTree/readValue/readValues with untrusted input)
Fixed Versions CVE-2022-42003: 2.12.7.1 and 2.13.4.1
upgraded
It is likely that Jackson will be used to parse untrusted JSON
data, however - exploitation requires that Jackson be initialized
with a non-default value, which is highly unlikely
There is a moderate risk CVE-2022-42003 will cause a DoS
impact on library usage.
M itigation Options
mapper.enable(JsonParser.Feature.UNWRAP_SINGLE_VALU
UNWRAP_SINGLE_VALUE_ARRAYS feature.
E_ARRAYS);
Contextual Analysis
/**
JFrog's contextual analysis scanner checks whether the non- * M ain deserialization method fo r bean-based objects (POJOs).
*/
readValues.
if (p.i sExpectedStartObjectToken()) {
if ( _vanillaProcessing) {
v ctxt, p.n
p.n extToken();
if (_objectIdReader != null) {
mapper.enable(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS);
mapper.readTree(untrusted_data);
DeserializationContext ctxt,
protected Object _deserializeFromArray(JsonParser p,
JsonToken t) throws IOException
DeserializationContext ctxt) throws IOException
{
{
if (t != null) {
.....................
switch (t) {
final CoercionAction act = _findCoercionFromEmptyArray(ctxt);
......................
final boolean unwrap =
case START_ARRAY:
ctxt.isEnabled(DeserializationFeature.UNWRAP_SINGLE_VALUE_ARRAYS);
or UNWRAP_SINGLE_ARRAY
if (unwrap || (act != CoercionAction.Fail)) {
......................
if (unwrap) { [4]
default:
final Object value = deserialize(p, ctxt); [5]
}
if (p.nextToken() != JsonToken.END_ARRAY) {
}
handleMissingEndArrayForSingle(p, ctxt);
} return value;
The main deserialization function in BeanDeserializer.java is On July 22, 2019, a blog-post regarding CVE-2019-12384 in
[1].
Jackson-databind was published by Doyensec company.
On [2], the _deserializeOther() function is called. Then, on [3] The post was shared on /r/netsec subreddit on that same day.
feature is enabled.
jackson-databind CVEs
On [5] it calls the deserialize() function again.
90
80
This results in an endless loop that was not intended ([1]->[5]->[1] 70
and so on), adding function calls to the call stack and ultimately 60
50
40
30
20
Trend Analysis
10
0
2019 2020 2021 2022
The following graph displays the number of CVEs affecting
jackson-databind disclosed over each of the last 3 years.
Jackson-databind deserialization vulnerabilities have existed since Version 2.10 introduced a new API that allows developers to safely
2017. Around the end of that year, the author of the package use Polymorphic typing.
released a Medium article: On Jackson CVEs: Don’t Panic — Therefore the number of Jackson-databind CVEs decreased and
Here is what you need to know.
is expected to remain low, since polymorphic typing CVEs
accounted for the bulk of all reported CVEs.
char *p;
The vulnerability leads to a 1 -byte over fl ow. This error is usec_t t = 100005;
printf("%s\n",p);
}
A partial proof of concept (PoC) was published. The PoC is an
internal test that performs a one-byte overwrite, by calling
internal functions.
Mitigation Options
Contextual Analysis
Impact Analysi
In December 2022, CVE-2022-1471 (RCE) was made public, Technical Vulnerability Details
which remained unfixed for an entire month after it was SnakeYAML is a popular Java-based YAML parsing that provides a
discovered high-level API for the serialization and deserialization of YAML
This issue was discovered on May 22, 2017 and published in a documents. A crafted YAML file containing a Java Constructor
paper called “Java Unmarshaller Security” by Moritz Bechler. A was revealed to lead to remote code execution due to
CVE was only reported for this issue five years later, on April deserialization.
11, 2022
CVE-2022-1471 was very widespread since SnakeYAML is the SnakeYaml's Constructor class, inherited from SafeConstructor,
#1 YAML parser for Java (according to Maven) allows any class type to be deserialized. A ConstructorException is
thrown, but only after the malicious payload is deserialized.
To exploit this issue, an attacker must find remote input The PoC will run an arbitrary JAR file supplied from
the attacker must deserialize a Java "gadget" class that's However, the vulnerability will not apply to applications that
available in the application's classpath in order to achieve use the (non-default) SafeConstructor.
javax.script.ScriptEngineManager shows:
C on t ex t u al An al ys i s
function is run with external data, where the file contents can
Yaml yaml = new Yaml(new Constructor(Foo.class));
Mitigation Options
Note: this class will only allow deserialization of basic types such as Integers, Strings,
Maps etc.
T rend A nal ys is
SnakeYAML CVEs
On April 26, 2022, initial integration of SnakeYAML was pushed
to OSS-Fuzz.
That same day, 3 out of the 7 CVEs were discovered by the fuzzer 7
(CVE-2022-38749,CVE-2022-38750, CVE-2022-38751). 5
JFrog Severity Rating High When loading a YAML document, SnakeYAML uses recursion to
parse objects from the document.
CVE-2022-38751: 1.31
Google OSS-Fuzz is a continuous fuzz testing service that helps
CVE-2022-38750: 1.31
identify and fix security vulnerabilities in open-source software by
using automated testing and machine learning to generate and
prioritize test cases.
Impact Analysi
Extremely popular since SnakeYAML is the #1 YAML parser for OSS-Fuzz reported the bug, found by one of its fuzzers. A
Java (according to Maven reproducer and stack trace were attached to the report.
Contextual Analysis
Vulnerability In-Depth Details
JFrog's contextual analysis scanner checks whether the Yaml.load No in-depth analysis is available for this issue.
function is run with external data, where the file contents can be
attacker-controlled.The scanner also checks whether a vulnerable Trend Analysis
yaml.load (external_data);
try {
catch ( StackOverflowError e ) {
Our dedicated team of security engineers and researchers are committed to advancing software security through discovery, analysis, and
exposure of new vulnerabilities and attack methods.
Stay up-to-date with JFrog Security Research. Follow the latest discoveries and technical updates from the JFrog Security Research team in our
security research blog posts and on Twitter at @JFrogSecurity.
____________________________