Close today

Go to Top

Go to Top

자동화가 빨라질수록, 사람의 판단이 더 중요한 이유
자동화가 빨라질수록, 사람의 판단이 더 중요한 이유

Threat Intelligence

Threat Intelligence

Threat Intelligence

Contagious Interview Campaign Abusing VSCode Distributed on Github

Contagious Interview Campaign Abusing VSCode Distributed on Github

Contagious Interview Campaign Abusing VSCode Distributed on Github

ENKI WhiteHat

ENKI WhiteHat

Content

Content

Content

Executive Summary

  • ENKI identified and analyzed malware on GitHub that abuses VS Code's automation features.

  • The distributed malware was confirmed to be Beavertail, InvisibleFerret, and OtterCookie, which were used in the Contagious Interview campaign.

  • Evidence was found suggesting that LLMs were utilized to write portions of the code.

  • It was confirmed that the attackers gained trust and distributed the malware by using accounts disguised as recruiters, developers, and fake companies.

  • Based on the characteristics of the detected C&C servers, additional C&C servers were identified and analyzed.

1. Overview

Recently, multiple instances of malware exploiting the automation features of VSCode(Visual Studio Code) have been identified on GitHub. Analysis confirmed that this malware is associated with the Contagious Interview campaign, with activity tracing back to at least August 2025.

The Contagious Interview campaign is an operation attributed to North Korean state-sponsored threat actors, primarily targeting software developers for malware dissemination. In this campaign, attackers typically impersonate recruiters to approach developers. Under the guise of technical coding tests or video interviews, they induce victims into downloading malicious payloads, including known families such as BeaverTail, InvisibleFerret, and OtterCookie**.**

The GitHub accounts identified in this investigation were found to be masquerading as recruiters from legitimate companies, Web3 developers, or fake companies. The threat actors likely employed this strategy to establish credibility by mimicking legitimate recruitment and development activities, thereby facilitating the distribution of malware.

Furthermore, analysis of the deployed malware revealed indicators suggesting the code was likely generated using Large Language Models (LLMs) rather than being manually authored. This suggests that the attackers are actively using AI technology to enhance the efficiency of malicious tool development and to complicate code analysis.

This report provides an analysis of the operational mechanisms and capabilities of the malware used in these attacks, as well as a detailed examination of the activity associated with the attacker-controlled GitHub accounts.

Github Activity

2.1. Corporate Recruiter Impersonation

In this instance, the threat actor impersonated a recruiter from Koinos, a Web3 company. Malware was discovered within a repository associated with a technical coding test.

Although the specific account profile is no longer accessible, the username "andrew" was identified as the actor. Evidence of this activity remains in multiple repositories that were forked for the purpose of coding tests.

Repositories Associated with Coding Tests

Malicious commands were found injected into the .vscode/tasks.json file across all identified repositories. This technique abuses VSCode's task automation features to trigger the download and execution of the malware immediately upon opening the project in the editor.

script injected in .vscode/task.json

A total of 11 repositories committed by the "andrew" account currently remain accessible. Analysis of the commit histories revealed that the actor also operated under the username "andrew_watson" and uses the email address andrew@koinos[.]us.

example of commit

The email domain koinos[.]us bears a strong resemblance to the legitimate domain of the impersonated entity, Koinos (koinos.io). Although the precise initial delivery vector remains unconfirmed, evidence such as the frequent use of terms such as "koinos," "assessment," and "dev-test" within repository names strongly suggests that the actor impersonated a corporate recruiter, utilizing the recruitment process as a lure to distribute malware.

2.2. Developer Activity

This instance involves threat actors masquerading as developers to inject malicious commands into collaborative repositories. A total of five accounts were identified, all positioning themselves as full-stack developers with prior experience in Web3 projects. The list of identified accounts is as follows.

  • ameeetgaikwad

  • dannythedawger

  • yosket

  • nikkhielseath

  • jmjles

accounts operating as developer

A total of 10 repositories were identified as containing injected malicious commands. The complete list of these repositories is detailed below.

  • Token-Presale-dApp

  • Promoting-DApp

  • dapp-integration

  • Web3-RE-Prototype

  • TrustLedger_Fixes

  • linkfi

  • testtoken

  • messageforge

  • Token-Presale

  • Decentralized-Social

Currently, the accounts "yosket" and "nikkhielseath" have been removed; however, the remaining three accounts remain active.

The malicious commands are embedded within the .vscode/tasks.json file. As these are collaborative repositories, this vector allows infection without explicit user interaction or separate lures, effectively compromising victims as soon as they engage with the shared project files.

script injected in .vscode/task.json

Among the identified accounts, "yosket" exhibited the highest level of activity. While the account has since been deleted, activity logs indicate it remained operational until January 16, 2026.

commit history of yosket at January 16, 2026

Furthermore, analysis of yosket’s commit history revealed that 10 repositories containing injected commands currently remain accessible. The list of these repositories is as follows.

  • hxxps://github[.]com/TrustLedgerLabs/Token-Presale-dApp

  • hxxps://github[.]com/ryon-business/Promoting-DApp

  • hxxps://github[.]com/angel-group888/dapp-integration

  • hxxps://github[.]com/AretaSchmidt/Web3-RE-Prototype

  • hxxps://github[.]com/QalbeAli/TrustLedger_Fixes

  • hxxps://github[.]com/trustllabs/Token-Presale-dApp

  • hxxps://github[.]com/DavidMoura07/linkfi

  • hxxps://github[.]com/VictorKulagin/testtoken

  • hxxps://github[.]com/rajaXcodes/Token-Presale-dApp

  • hxxps://github[.]com/Rochelle128/TokenPresaleDApp

Investigation confirmed that all four additional accounts participated in the same projects as yosket. Notably, within the "messageforge" repository, coordinated activity between two accounts was observed, suggesting a collaborative effort to distribute the malware.

messageforge repository, commit of nikkhielseath

In addition to the commands responsible for downloading and executing the primary payload, the .vscode/tasks.json file was modified to include an execution command for .vscode/spellright.dict via Node.js. The .vscode/spellright.dict file is, in fact, a JavaScript file obfuscated using obfuscator.io and committed by the account "ameeetgaikwad".

.vscode/spellright.dict file added by ameeetgaikwad

2.3. Fake Company Activity

In this instance, malicious commands were identified within repositories belonging to a specific corporate entity. Investigation revealed that this entity is a fake company designed to appear legitimate. The threat actors established a credible facade by constructing a corporate website and creating associated LinkedIn profiles.

Malicious command injections have been confirmed across all three identified repositories associated with this entity.

fake company account veneliteus-dev

Identical malicious commands were discovered within the .vscode/tasks.json files across all three repositories. Timestamp analysis indicates a coordinated effort, with all malicious modifications occurring on January 14, 2026.

The attackers attempted to conceal the malicious payload by appending it after a long sequence of whitespace characters, pushing the code out of the immediate visual field of reviewers.

script injected in .vscode/task.json

The website linked to the "veneliteus-dev" account profile is currently accessible but non-functional. Furthermore, while four social media links are displayed, only the LinkedIn link directs to a specific profile; the remaining three (Facebook, Instagram, and X) merely redirect to the main landing pages of those platforms, rather than to any specific account.

https://veneliteus[.]com

Venelitus linkedin

Furthermore, testing the email input field on the website revealed that while a "Message sent!" notification is displayed, no actual email is transmitted.

Although the precise distribution vector remains unconfirmed, it is assessed that the threat actors likely employed a strategy similar to the "Corporate Recruiter Impersonation" tactic to distribute the malware.

3. Attack Analysis

공격 개요도

caption - Attack Overview

The attack flow of the current Contagious Interview campaign is divided into two paths. Depending on the target environment or the specific stage of the attack, the threat actors distribute either a combination of BeaverTail and InvisibleFerret, or deploy OtterCookie as a separate payload.

3.1. Beavertail, InvisibleFerret

3.1.1. task.json - Downloader

This downloader is executed only by VS Code. By setting the runOn property within runOptions to folderOpen, the injected command runs automatically whenever the repository’s folder is opened in VSCode.

hidden command in .vscode/task.json using long whitespace

A total of three separate commands were injected, designed to trigger the appropriate execution based on the victim's operating system (Linux, macOS, or Windows). The commands download a script from the C&C server and run it.

injected commands

Although the download URLs vary by operating system, the downloaded scripts for Linux and macOS are identical. All scripts follow a common pattern of downloading and executing an additional secondary script.

If the operating system is Linux or macOS, the shell script is initially downloaded to the path $HOME/Documents/tokenlinux.npl. After the download, the file is renamed to tokenlinux.sh and then executed.

Linux, macOS download script

If the operating system is Windows, a cmd script is downloaded to %USERPROFILE%/parse. The file is then renamed to token.cmd and executed.

Windows download script

However, during the analysis, the Windows cmd script could not be retrieved. The attempt resulted in an error message stating Access permanently suspended.

tokenlinux.sh - Downloader

The tokenlinux.sh file, executed on Linux and macOS, functions as a downloader and appears to have been authored by a Large Language Model (LLM).

In contrast to the scripts previously observed in the Contagious Interview campaign, this file features detailed commenting and the use of emojis within those comments, characteristics that strongly indicate it was generated using an LLM.

detailed comments using emojis

The tokenlinux.sh script first checks for the presence of a nodejs directory in the current path. If the directory is missing, it downloads and extracts the Node.js binary. After extraction, it adds Node.js to the system PATH. It then retrieves parser.js and package.json from the C2 server, saving them to the $HOME/Documents directory.

Finally, the script executes parser.js using the downloaded Node.js environment. The accompanying package.json file contains the dependency information required to run parser.js.

parser.js

parser.js is a JavaScript-based downloader that has been obfuscated using obfuscator.io. The key obfuscation techniques applied are as follows.

  • String Extraction and Array Storage**:** Key strings used within the code are extracted and stored in a separate array.

  • Runtime Array Shuffling**:** The order of the string array is rearranged by a specific logic at the beginning of execution.

  • Offset-Based String Access**:** Strings are not referenced directly; instead, they are retrieved from the array using a separate wrapper function that accepts an offset value as an argument.

  • Identifier Renaming**:** Meaningful variable and function names are replaced with short, meaningless identifiers such as a1.

obfuscated script

In addition to standard obfuscation, the script implements anti-tampering mechanisms. If the code detects any form of modification or ****formatting, it triggers the execution of dummy code designed to intentionally generate errors and halt the script's execution.

anti-tampering related function

The malware establishes communication with two distinct C&C servers, each serving a specific purpose as detailed below.

  • Information Retrieval Server: Retrieves the configuration data required to download BeaverTail, specifically the address of the second C&C server and the Campaign ID.

  • Malware Download Server: Downloads the actual BeaverTail payload.

The addresses for the information retrieval server are Base64 encoded, and two distinct addresses are provided. If communication with the primary C&C server fails, it automatically attempts to connect to the secondary server.

information retrieval server address decoding routine

Upon connecting to hxxp://[Information Retrieval Server]:1244/s/6df937fe9011, the malware checks if the response begins with the prefix ZT3. If confirmed, the subsequent data is Base64 decoded. The decoded string is structured as [C&C Address],[Campaign ID], separated by a comma. As of January 26, 2026, the C&C server address is identified as 66.235.175[.]117 and the campaign ID is knHbMe8.

malware download server address decoding routine

Strings within the code are decrypted using XOR with the key 0x70a07948.

string decryption routine

The malware download and execution process proceeds as follows.

  1. Creates a .vscode folder in the Home directory.

  2. Sends the Hostname, Username, and Current Time to hxxp://[Malware Download C2 Server]:1244/key

  3. Downloads the BeaverTail script from hxxp://[Malware Download C2 Server]:1244/j/[Campaign ID]

    • Save Path: .vscode/test.js

  4. Downloads the package file required to run test.js from hxxp://[Malware Download C2 Server]:1244/p

    • Save Path: .vscode/package.json

  5. Executes .vscode/test.js.

The malware download routine is executed three times, repeating at approximately 10-minute intervals.

Beavertail

The BeaverTail malware consists of three distinct JavaScript files. The initially executed test.js downloads and executes the remaining two files. In addition, all Beavertail components empoly the same obfuscation and anti-tampering techniques previously observed in parser.js.

test.js

This script collects browser information then downloads and executes n.js and p.js. The list of browsers targeted for data collection is as follows.

  • Chrome

  • Chromium

  • Brave

  • Opera

The malware collects stored account credentials and browser extension data, then uploads them to hxxp://66.235.175[.]117:1244/uploads. The list of browser extensions targeted for this data collection is detailed in the table below.

nkbihfbeogaeaoehlefnkodbefgpgknn

ejbalbakoplchlghecdalmeeeajnimhm

ibnejdfjmmkpcnlpebklmnkoeoihofec

fhbohimaelbohpjbbldcngcnapndodjp

hnfanknocfeofbddgcijnmhnfnkdnaad

bfnaelmomeimhlpmgjnjophhpkkoljpa

aeachknmefphepccionboohckonoeemg

egjidjbpglichdcondbcbdnbeeppgdph

hifafgmccdpekplomjjkcfgodnhcellj

aholpfdialjgjfhomihkjbmgjidlcdno

mcohilncbfahbmgdjkbpemcciiolgcge

pdliaogehgdbhbnmkklieghmmjkpigpa

nphplpgoakhhjchkkhmiggakijnkhfnd

fdjamakpfbbddfjaooikfcpapjohcfmg

acmacodkjbdgmoleebolmdjonilkdbch

dmkamcknogkgcdfhhbddcghachkejeap

mkpegjkblkkefacfnmkajcjmabijhclg


After the data upload, the malware downloads a file from hxxp://66.235.175[.]117:1244/client/knHbMe8 and saves it as .npl. This downloaded file is InvisibleFerret, a Python-based payload, and is execute via Python. If the operating system is Windows, the malware downloads a Python interpreter from hxxp://66.235.11[.]117:1244/pdo to execute the .npl file.

.npl file download routine

Following the execution of InvisibleFerret, the remaining files of the BeaverTail malware are downloaded and executed. The file downloaded from hxxp://66.235.11[.]117:1244/n/knHbMe8 is saved as .vscode/n.js and the file downloaded from hxxp://66.235.11[.]117:1244/z/knHbMe8 is saved as .vscode/p.js.

additional Beavertail download routine

n.js

Functioning as a backdoor, this script first collects system information and uploads it to hxxp://66.235.175[.]117:1244/keys. The specific system information collected is as follows.

  • location information retrieved from IP address

  • ISP information

  • uuid from HMAC digested username

  • hostname

  • username

  • OS type

  • OS release

  • OS version

After the data upload, the malware establishes a socket connection to communicate with the C&C server. The C&C server is 216.250.251[.]87 and uses the port 1247.

socket connection routine

When the socket connection is established, the malware waits to receive a code value (command) from the C2 server. Based on this value, it executes malicious actions detailed in the table below.

code value

command name

actions

1

ssh_obj

Executes the provided command. (remote shell)

2

ssh_cmd

Terminates the current process.

5

ssh_upload

Uploads specified file or directory using FTP.

6

ssh_kill

Terminates chrome and brave browsers.

8

ssh_env

Searches all files satisfying specific conditions and uploads them using FTP.

10

ssh_mmc

Saves the provided JavaScript file to ~/.vscode/c.js and executes it.

When uploading files, the malware uses FTP. The specific domain, username, and password for the FTP server are transmitted from the C&C server. All files are uploaded to /DAknHbMe8/[hostname]+[username]/[filename].

FTP upload routine

The ssh_env command uploads all files at file paths that contain any of the strings listed in the table below.

.env

.xls

config.js

.xlsx

secret

.doc

metamask

.docx

wallet

.rtf

private

.kbdx

mnemonic

.one

password

.onenote

account

solana

seed


However, files with specific names or extensions such as tsconfig.json are excluded from the upload. Similarly, specific directories such as node_modules are skipped during the search process. For the complete list of exclusions, refer to "Appendix C. Search Conditions".

p.js

This script is designed for file collection and upload. It searches and exfiltrates files located in paths that satisfy the patterns listed in the table below.

*.env

seed*

config.js

keys*

secret*

keypair.json

metamask*

1pass*.sqlite

wallet*

notes.txt

private*

hardhat.config.ts

mnemonic*

solana*

password*

.kdbx

account*


Similar to n.js, this component does not scan specific directory paths and does not upload files with specific extensions. For the detailed list of these exclusions, please refer to “Appendix C. Search Conditions”.

upload file search routine

File uploads are performed by sending a POST request with the structure described below to:
hxxp://66.235.175[.]117:1244/uploads.

{
    "timestamp": "jzt",
    "type": "knHbMe8",
    "hid": "[hostname]",
    "multi_file": {
        "value": "[files tream]", 
        "options" : {
            "filename": 
            "env_[current time]_[random number between 0~40]_[file index]"
        }
    }
}
{
    "timestamp": "jzt",
    "type": "knHbMe8",
    "hid": "[hostname]",
    "multi_file": {
        "value": "[files tream]", 
        "options" : {
            "filename": 
            "env_[current time]_[random number between 0~40]_[file index]"
        }
    }
}
{
    "timestamp": "jzt",
    "type": "knHbMe8",
    "hid": "[hostname]",
    "multi_file": {
        "value": "[files tream]", 
        "options" : {
            "filename": 
            "env_[current time]_[random number between 0~40]_[file index]"
        }
    }
}

In the structure above, the file index refers to the file's sequential position within the list generated by matching the search patterns.

Once the file upload is complete, the file path and hostname are uploaded to hxxp://66.235.175[.]117:1244/keys using the structure described below.

{
    "ts": "jzt",
    "type": "knHbMe8",
    "hid": "[hostname]",
    "ss": "jzt_[search pattern]_[current time]",
    "cc": "env_[current time]_[random number between 0~40]_[file index] : [file path]"
}
{
    "ts": "jzt",
    "type": "knHbMe8",
    "hid": "[hostname]",
    "ss": "jzt_[search pattern]_[current time]",
    "cc": "env_[current time]_[random number between 0~40]_[file index] : [file path]"
}
{
    "ts": "jzt",
    "type": "knHbMe8",
    "hid": "[hostname]",
    "ss": "jzt_[search pattern]_[current time]",
    "cc": "env_[current time]_[random number between 0~40]_[file index] : [file path]"
}

InvisibleFerret

InvisibleFerret is a Python-based malware that consists of five distinct Python scripts. All InvisibleFerret scripts are obfuscated using the method described below.

  1. The string following the first 8 characters of the obfuscated text is decoded using Base85.

  2. The decoded result is XORed with the first 8 characters which were previously unused. The resulting code is then executed using the exec function

  3. The string executed via exec takes a new string, reverses it, Base64 decodes it, decompresses it using zlib, and then executes it again using exec.

  4. Repeating the process in step 3 approximately 64 times results in the execution of the actual malicious script.

.npl

This InvisibleFerret script, executed by BeaverTail, downloads and runs two additional scripts.

script download and execution routine

Downloads a file from hxxp://66.235[.]175.117:1244/payl/knHbMe8, saves it as .vscode/pay, and executes it. Additionally, it downloads a file from hxxp://66.235[.]175.117:1244/bro/knHbMe8, saves it as .vscode/bow, and executes it. If the operating system is Darwin the bow file is not downloaded.

pay

This is a backdoor malware that performs malicious actions based on code values received through a socket connection with the C&C server. the C&C server address is 216.250.251[.]87 and uses the port 1245.

socket connection routine

The actions performed based on the received code values are detailed in the table below.

code

name

actions

1

ssh_obj

Executes the provided command. (remote shell)

2

ssh_cmd

Execute self-deletion.

3

ssh_clip

Sends keylogging/clipboard logging data.

4

ssh_run

Downloads and executes ~/.n2/bow from hxxp://66.235.175[.]117:1244/bro/knHbMe8.

5

ssh_upload

Uploads file from provided path.

6

ssh_kill

Terminates chrome and brave browsers.

7

ssh_any

Downloads and executes ~/.n2/adc from hxxp://66.235.175[.]117:1244/adc/knHbMe8.

8

ssh_env

Searches all files satisfying specific conditions and uploads them using FTP.

9

ssh_zcp

Compresses files from the specified path into an encrypted archive and uploads them via Telegram and FTP.

10

ssh_mmc

Downloads and executes ~/.n2/mc from hxxp://66.235.175[.]117:1244/dd/knHbMe8.

The ssh_env command searches and uploads files whose paths contain any of the strings listed in the table below.

env

.xls

config.js

.xlsx

secret

.doc

metamask

.docx

wallet

.rtf

private

.kbdx

mnemonic

.one

password

.onenote

account


For a detailed list of these parameters, refer to “Appendix C. Search Conditions”.

bow

The TsunamiInjector script is obfuscated and saved to the Startup folder to ensure the malicious script maintains persistence on the infected system.

script saving routine

The TsunamiInjector script decrypts and visits approximately 1,000 encrypted URLs to identify those that contain active content. The decryption process is as follows.

  • Decodes the string encoded in hexadecimal.

  • The decoded string is XORed with the key !!!HappyPenguin1950!!!.

  • The decrypted string is Base64 decoded, and then the sequence of characters is reversed.

URL decryption routine

All decrypted URLs point to Pastebin, a popular text-sharing platform. If the script finds a Pastebin URL that still contains active content, it decrypts the text found on that page using the same process described previously. The result of the decryption is another URL; the file is downloaded from that URL and extracted to %APPDATA%\Microsoft\Windows\Applications\Runtime Broker.exe.

file download routine

Once the file download is complete, it excludes the file path from Windows Defender scans and creates a scheduled task to ensure it executes every time the user logs in.

task creation routine

adc

This script downloads AnyDesk, a remote desktop control program, from hxxp://66.235.175[.]117:1244/and. Afterward, it updates the downloaded AnyDesk’s configuration so that the attacker’s account can connect remotely at any time.

Anydesk configuration update routine

mc

This script manipulates the browser environment and ultimately installs a cryptocurrency wallet browser extension. Upon execution, it first self-deletes.

self-deletion routine

It then enumerates the extension directories of the Chrome and Brave browsers and deletes all files belonging to specific extensions. The list of target extension IDs is as follows.

  • nkbihfbeogaeaoehlefnkodbefgpgknn

  • acmacodkjbdgmoleebolmdjonilkdbch

After deleting the extension files, it downloads a file from hxxp://45.59.163[.]55:1244/mmz/[browser extension ID]_knHbMe8 and extracts it into the directory of the removed extension. The browser extensions modified in this process are Rabby Wallet and MetaMask, both of which are cryptocurrency wallet extensions.

browser extension file modification routine

Afterward, the malware collects Chrome’s profile settings files and sends them to hxxp://45.59.163[.]55:1244/h. If it receives a valid response from the server, it uses the response values to manipulate Chrome’s Secure Preferences settings.

Additionally, in macOS environments, if Chrome’s major version is 140 or higher, it attempts to downgrade Chrome by downloading a file from hxxp://45.59.163[.]55:1244/ddo and overwriting the app at /Applications/Google Chrome.app.

chrome downgrade routine

Once the settings changes are complete, it deletes all cookies, cache, session data, and other stored artifacts in the browser to apply the changes immediately, then sends the success status to hxxp://66.235.175[.]117:1244/t.

3.2. OtterCookie

task.json – Downloader

This downloader is executed only by VS Code. By setting the runOn property within runOptions to folderOpen, the injected command runs automatically whenever the repository’s folder is opened in VSCode. Unlike the task.json file used to distribute Beavertail and InvisibleFerret, the command is not hidden.

commands injected in .vscode/tasks.json

Although the download URLs vary by operating system, the downloaded scripts for Linux and macOS are identical. All scripts follow a common pattern of downloading and executing an additional secondary script.

If the operating system is Linux or macOS, the shell script is initially downloaded to the path $HOME/.vscode/vscode-bootstrap.sh and executed.

Linux, macOS download script

If the operating system is Windows, it downloads a CMD script to %USERPROFILE%\.vscode\vscode-bootstrap.cmd and executes it.

Windows download script

However, at the time of analysis, the CMD script downloaded on Windows printed the error message “Access permanently suspended.” and could not be obtained.

vscode-bootstrap.sh - Downloader

The vscode-bootstrap.sh script executed on Linux and macOS functions as a downloader. Like tokenlinux.sh, it appears to have been authored by an LLM. The difference is that it does not use emojis.

script with detailed comments

It checks whether a nodejs directory exists in the current path; if it does not, it downloads Node.js and extracts it. After extraction, it downloads env-setup.js and package.json from the C&C server and saves them to $HOME/.vscode. It then executes env-setup.js using the downloaded Node.js.

env-setup.js - Downloader

env-setup.js is a downloader that connects to hxxps://y-lilac-sigma.vercel[.]app/api/ipcheck-encrypted/608 and executes the response via eval function. Notably, it does not execute on a successful response; instead, it executes when an error occurs.

env-setup.js code

OtterCookie

OtterCookie is downloaded and executed via env-setup.js, and the same obfuscation and anti-tampering techniques as Beavertail are applied.

OtterCookie executes three scripts—stored as strings—in separate, independent processes. To prevent duplicate execution, it writes { pid: [process PID], startedAt: [process start time] } to a lock file. The lock file names and script details are shown in the table below.

lock file name

script name

actions

pid.6.1.lock

ldbScript

Exfiltrates information stored in the browser.

pid.6.2.lock

autoUploadScript

Search and upload specific files.

pid.6.3.lock

socketScript

performs actions according to the commands received from the C&C server

ldbScript

This script collects account information stored in the browser and details about installed browser extensions. The list of target browsers for data collection is detailed in the table below.

Chrome

Kiwi

Brave

Yandex

AVG Browser

Iridium

Edge

Comodo

Opera

SRWare

Opera GX

Chromium

Vivaldi


The list of browser extensions targeted for data collection is detailed in the table below.

1nkbihfbeogaeaoehlefnkodbefgpgknn

fhkbkphfeanlhnlffkpologfoccekhic

ejbalbakoplchlghecdalmeeeajnimhm

fhmfendgdocmcbmfikdcogofphimnkno

acmacodkjbdgmoleebolmdjonilkdbch

fldfpgipfncgndfolcbkdeeknbbbnhcc

bfnaelmomeimhlpmgjnjophhpkkoljpa

gjnckgkfmgmibbkoficdidcljeaaaheg

ibnejdfjmmkpcnlpebklmnkoeoihofec

hifafgmccdpekplomjjkcfgodnhcellj

egjidjbpglichdcondbcbdnbeeppgdph

hmeobnfnfcmdkdcmlblgagmfpfboieaf

nphplpgoakhhjchkkhmiggakijnkhfnd

hnfanknocfeofbddgcijnmhnfnkdnaad

omaabbefbmiijedngplfjmnooppbclkk

jiidiaalihmmhddjgbnbgdfflelocpak

bhhhlbepdkbapadjdnnojkbgioiodbic

jblndlipeogpafnldhgmapagcccfchpi

aeachknmefphepccionboohckonoeemg

jmbkjchcobfffnmjboflnchcbljiljdk

aflkmhkiijdbfcmhplgifokgdeclgpoi

jnjpmcgfcfeffkfgcnjefkbkgcpnkpab

agoakfejjabomempkjlepdflaleeobhb

kpkmkbkoifcfpapmleipncofdbjdpice

aholpfdialjgjfhomihkjbmgjidlcdno

khpkpbbcccdmmclmpigdgddabeilkdpd

afbcbjpbpfadlkmhmclhkeeodmamcflc

ldinpeekobnhjjdofggfgjlcehhmanaj

cgbogdmdefihhljhfeffkljbghamglni

lgmpcpglpngdoalbgeoldeajfclnhafa

dmkamcknogkgcdfhhbddcghachkejeap

mcohilncbfahbmgdjkbpemcciiolgcge

dlcobpjiigpikoobohmabehhmhfoodbb

mopnmbcafieddcagagdcbnhejhlodfdd

efbglgofoippbgcjepnhiblaibcnclgk

nkklfkfpelhghbidbnpdfhblphpfjmbo

ejjladinnckdgjemekebdpeokbikhfci

penjlddjkjgpnkllboccdgccekpkcbin

fhbohimaelbohpjbbldcngcnapndodjp

ppbibelpcjmhbdihakflkdcoccbgbkpo

autoUploadScript

This script scans all drives for files containing specific strings and then uploads them to hxxp://172.86.73[.]198:8086/upload. For the strings used in the search, refer to “Appendix C: Search Conditions”.

file upload routine

Unlike ldbScript’s file upload method, no file metadata is included, and the file path is used to generate the HMAC token.

The autoUploadScript also appears to have been authored by an LLM, evidenced by traits such as unusually detailed comments and frequent console output that isn’t shown to the user.

socketScript

This script collects system information and sends it to hxxp://172.86.73[.]198:8087/api/notify. The collected fields and transmission format are as follows.

{
  ukey: 608,
  t: 6,
  host: "608_[hostname]",
  os: "[OS type]",
  username: "[username]",
  timestamp: "[current time]"
}
{
  ukey: 608,
  t: 6,
  host: "608_[hostname]",
  os: "[OS type]",
  username: "[username]",
  timestamp: "[current time]"
}
{
  ukey: 608,
  t: 6,
  host: "608_[hostname]",
  os: "[OS type]",
  username: "[username]",
  timestamp: "[current time]"
}

It then establishes a socket connection to the C&C server. The C&C server address is 172.86.73[.]198 and uses the port 8087. The actions performed based on messages received from the C&C server over the socket are shown in the table below.

message

actions

whour

Sends the previously collected system information.

command

Executes the provided command.

disconnect

Terminates the connection to the socket server and waits.

reconnect

Re-establishes a connection to the socket server.

processControl

Manipulates other OtterCookie processes

The processControl command is designed to stop or restart ldbScript, autoUploadScript, and socketScript. But only the stop capability is actually implemented.

incompleted processControl command

The socketScript also appears to have been authored by an LLM, as suggested by traits like unusually detailed comments and frequent console output that isn’t shown to the user.


Additional C&C Servers

The C&C servers for Beavertail and InvisibleFerret share the following characteristics.

  1. An HTTP server is present on port 1244.

  2. Ports 21 (FTP) and 3389 (RDP) are open.

  3. The servers are primarily hosted with VPS providers.

  4. Accessing hxxp://[C&C server]:1244/p returns a package.json file.

Using the characteristics 1, 2, and 3 of above, we first identified 18 related IP addresses on Censys.

Censys query result

Second, we checked the response of hxxp://[IP]:1224/p for the IPs we obtained and ultimately identified 10 C&C server addresses. The list of C&C server addresses is detailed in the table below.

server IP

campaign ID

hosting information

216.250.251[.]211


VPS server from the India-based hosting provider Majestic Technosoft.

45.59.163[.]23


VPS server from the U.S.-based hosting provider Tier.Net.

38.92.47[.]152


VPS server from the U.S.-based hosting provider Tier.Net.

103.65.230[.]100


VPS server from the Bulgaria-based hosting provider EuroHoster.

147.124.213[.]19


VPS server from the India-based hosting provider Majestic Technosoft.

66.235.175[.]117

knHbMe8


ryGnMe8

VPS server from the U.S.-based hosting provider Tier.Net.


66.235.175[.]109

ryGnMe8

VPS server from the U.S.-based hosting provider Tier.Net.

147.124.202[.]225


VPS server from the U.S.-based hosting provider Tier.Net.

67.203.7[.]205

ZRj2s0k9

VPS server from the U.S.-based hosting provider Colocation America.

147.124.213[.]232

kmHgMq7

VPS server from the India-based hosting provider Majestic Technosoft.

All C&C servers used VPS hosting, and even when the hosting providers differed, the IP geolocation resolved to the United States. In addition, seven of the IPs excluding 130.65.230[.]100, 66.235.175[.]117, and 66.235.175[.]109 have port 445 (SMB) open.

Apart from that, most C&C servers did not respond when requests were sent with an incorrect campaign ID, but three C&C servers 66.235.175[.]109, 38.92.47[.]152, and 45.59.163[.]23 did respond.

38.92.47[.]152 returned an error message, while 66.235.175[.]109 and 45.59.163[.]23 echoed back the incorrect campaign ID that was sent in the request.

OtterCookie’s C&C servers were protected by bulletproof hosting, so we were unable to identify any additional C&C servers.

5. Conclusion

This report analyzed the Contagious Interview campaign, which was distributed by abusing VS Code's automation features on GitHub. The malware executed in the final stage was identified as Beavertail, InvisibleFerret, and OtterCookie. These were confirmed to steal sensitive information such as browser account credentials and cryptocurrency wallet files from infected systems. Additionally, malicious activities including remote control and downloading additional malware were identified upon receiving commands from a C&C server.

Notably, this campaign increased the efficiency of attack tool development by utilizing Large Language Models (LLM) to create malicious scripts. Social engineering techniques were also confirmed, such as impersonating actual corporate recruiters and posing as regular developers contributing to open-source projects. Furthermore, the analysis identified multiple additional C&C servers operated by the attacker, confirming that the attack infrastructure is being continuously expanded and maintained.

The Contagious Interview campaign continues to be observed, with attackers targeting developers and the open-source ecosystem centered on GitHub. In particular, the technique of abusing developer tool automation in repositories disguised as coding assignments, interview projects, and test code supports the conclusion that the campaign’s tactics are continuously evolving.

The Contagious Interview campaign continues to be observed, with attackers targeting developers and the open-source ecosystem, particularly around GitHub. The attack method which involves exploiting the automation features of development tools within repositories disguised as recruitment tasks, interview projects, or test code supports the evidence that the campaign's tactics are continuously evolving.

6. Appendix

Appendix A. MITRE ATT&CK

| Tactics | Techniques |
| --- | --- |
| Initial Access | T1566: Phishing-nT1195.001: Supply Chain Compromise: Compromise Software Dependencies and Development Tools |
| Execution | T1059: Command and Scripting Interpreter |
| Defense Evasion | T1027: Obfuscated Files or Information-nT1562.001: Disable or Modify Tools-nT1070.004: Indicator Removal: File Deletion |
| Persistence | T1547.001: Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder-nT1053.005: Scheduled Task/Job: Scheduled Task |
| Discovery | T1082: System Information Discovery-nT1083: File and Directory Discovery-nT1518: Software Discovery-nT1057: Process Discovery |
| Credential Access | T1555.003: Credentials from Password Stores: Credentials from Web Browsers-nT1056.001: Input Capture: Keylogging |
| Collection | T1115: Clipboard Data |
| Command and Control | T1071.001: Application Layer Protocol: Web Protocols-nT1071.002: Application Layer Protocol: File Transfer Protocols-nT1219.002: Remote Access Software: Remote Desktop Software-nT1102.001: Web Service: Dead Drop Resolver-nT1571: Non-Standard Port |
| Exfiltration | T1048: Exfiltration Over Alternative Protocol-nT1041: Exfiltration Over C2 Channel

| Tactics | Techniques |
| --- | --- |
| Initial Access | T1566: Phishing-nT1195.001: Supply Chain Compromise: Compromise Software Dependencies and Development Tools |
| Execution | T1059: Command and Scripting Interpreter |
| Defense Evasion | T1027: Obfuscated Files or Information-nT1562.001: Disable or Modify Tools-nT1070.004: Indicator Removal: File Deletion |
| Persistence | T1547.001: Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder-nT1053.005: Scheduled Task/Job: Scheduled Task |
| Discovery | T1082: System Information Discovery-nT1083: File and Directory Discovery-nT1518: Software Discovery-nT1057: Process Discovery |
| Credential Access | T1555.003: Credentials from Password Stores: Credentials from Web Browsers-nT1056.001: Input Capture: Keylogging |
| Collection | T1115: Clipboard Data |
| Command and Control | T1071.001: Application Layer Protocol: Web Protocols-nT1071.002: Application Layer Protocol: File Transfer Protocols-nT1219.002: Remote Access Software: Remote Desktop Software-nT1102.001: Web Service: Dead Drop Resolver-nT1571: Non-Standard Port |
| Exfiltration | T1048: Exfiltration Over Alternative Protocol-nT1041: Exfiltration Over C2 Channel

| Tactics | Techniques |
| --- | --- |
| Initial Access | T1566: Phishing-nT1195.001: Supply Chain Compromise: Compromise Software Dependencies and Development Tools |
| Execution | T1059: Command and Scripting Interpreter |
| Defense Evasion | T1027: Obfuscated Files or Information-nT1562.001: Disable or Modify Tools-nT1070.004: Indicator Removal: File Deletion |
| Persistence | T1547.001: Boot or Logon Autostart Execution: Registry Run Keys / Startup Folder-nT1053.005: Scheduled Task/Job: Scheduled Task |
| Discovery | T1082: System Information Discovery-nT1083: File and Directory Discovery-nT1518: Software Discovery-nT1057: Process Discovery |
| Credential Access | T1555.003: Credentials from Password Stores: Credentials from Web Browsers-nT1056.001: Input Capture: Keylogging |
| Collection | T1115: Clipboard Data |
| Command and Control | T1071.001: Application Layer Protocol: Web Protocols-nT1071.002: Application Layer Protocol: File Transfer Protocols-nT1219.002: Remote Access Software: Remote Desktop Software-nT1102.001: Web Service: Dead Drop Resolver-nT1571: Non-Standard Port |
| Exfiltration | T1048: Exfiltration Over Alternative Protocol-nT1041: Exfiltration Over C2 Channel

caption - MITRE ATT&CK

Appendix B. IOCs

sha256

| sha256 | 파일명 |
| --- | --- |
|748b044a62787bf8341ac46208ac5c7703b0cf6d0fffdd2c76160244247cd930 | tokenlinux.sh|
|2f94573c15bfa1f945a0e1116b2373542d7a1dbc12dd58eb612078ddafbff54b | parser.js|
|a51b6b30d871acf43539ef4f19bfd1954a5db3f8422ed91fc14519ef60431296 | test.js|
|7e6ae216310d938218ff4fdf8bfe2e9a73d7684188705b97232e968022cc6b46 | n.js|
|50b14f2ea38cb7a388917394e8906712caf67acaf1c60ac6fab71072ef1eca3b | p.js|
|0f0b20e88511ae2014b0c90ed2dbbcaad7e5d9593b50fdd43081f24cb0d05534 | pay|
|9310f180e417a6cd5b505cdec0a726a9f0c39519687491d22bd98d917e0139f8 | bow|
|8e142c55f0af4961b59cb0dae027eeb256d173ba094afdf66d8fbf047f014169 | adc|
|572a75f932aecd2bcbe5eb4685e399e04688c94dd44a75db92d51618467a0d18 | mc|
|964885a574aa6287a55bfe6fdb1512d531b03c9e15609fe6782afbb0116f6fba | vscode-bootstrap.sh|
|1f97f7a0614685f2e8cd8347bf10cd7832b5dd9dce96e195e15da9b9b2be2e3e | env-setup.js|
|d7c36881f91c45b66b32ec0c80f2d49ff90d76d2d147f2d208c6eea48842618c | OtterCookie

| sha256 | 파일명 |
| --- | --- |
|748b044a62787bf8341ac46208ac5c7703b0cf6d0fffdd2c76160244247cd930 | tokenlinux.sh|
|2f94573c15bfa1f945a0e1116b2373542d7a1dbc12dd58eb612078ddafbff54b | parser.js|
|a51b6b30d871acf43539ef4f19bfd1954a5db3f8422ed91fc14519ef60431296 | test.js|
|7e6ae216310d938218ff4fdf8bfe2e9a73d7684188705b97232e968022cc6b46 | n.js|
|50b14f2ea38cb7a388917394e8906712caf67acaf1c60ac6fab71072ef1eca3b | p.js|
|0f0b20e88511ae2014b0c90ed2dbbcaad7e5d9593b50fdd43081f24cb0d05534 | pay|
|9310f180e417a6cd5b505cdec0a726a9f0c39519687491d22bd98d917e0139f8 | bow|
|8e142c55f0af4961b59cb0dae027eeb256d173ba094afdf66d8fbf047f014169 | adc|
|572a75f932aecd2bcbe5eb4685e399e04688c94dd44a75db92d51618467a0d18 | mc|
|964885a574aa6287a55bfe6fdb1512d531b03c9e15609fe6782afbb0116f6fba | vscode-bootstrap.sh|
|1f97f7a0614685f2e8cd8347bf10cd7832b5dd9dce96e195e15da9b9b2be2e3e | env-setup.js|
|d7c36881f91c45b66b32ec0c80f2d49ff90d76d2d147f2d208c6eea48842618c | OtterCookie

| sha256 | 파일명 |
| --- | --- |
|748b044a62787bf8341ac46208ac5c7703b0cf6d0fffdd2c76160244247cd930 | tokenlinux.sh|
|2f94573c15bfa1f945a0e1116b2373542d7a1dbc12dd58eb612078ddafbff54b | parser.js|
|a51b6b30d871acf43539ef4f19bfd1954a5db3f8422ed91fc14519ef60431296 | test.js|
|7e6ae216310d938218ff4fdf8bfe2e9a73d7684188705b97232e968022cc6b46 | n.js|
|50b14f2ea38cb7a388917394e8906712caf67acaf1c60ac6fab71072ef1eca3b | p.js|
|0f0b20e88511ae2014b0c90ed2dbbcaad7e5d9593b50fdd43081f24cb0d05534 | pay|
|9310f180e417a6cd5b505cdec0a726a9f0c39519687491d22bd98d917e0139f8 | bow|
|8e142c55f0af4961b59cb0dae027eeb256d173ba094afdf66d8fbf047f014169 | adc|
|572a75f932aecd2bcbe5eb4685e399e04688c94dd44a75db92d51618467a0d18 | mc|
|964885a574aa6287a55bfe6fdb1512d531b03c9e15609fe6782afbb0116f6fba | vscode-bootstrap.sh|
|1f97f7a0614685f2e8cd8347bf10cd7832b5dd9dce96e195e15da9b9b2be2e3e | env-setup.js|
|d7c36881f91c45b66b32ec0c80f2d49ff90d76d2d147f2d208c6eea48842618c | OtterCookie

caption - sha256

ip

  • 216.250.251[.]211

  • 216.250.251[.]87

  • 45.59.163[.]23

  • 45.59.163[.]55

  • 38.92.47[.]152

  • 103.65.230[.]100

  • 147.124.213[.]19

  • 66.235.175[.]117

  • 66.235.175[.]109

  • 147.124.202[.]225

  • 67.203.7[.]205

  • 147.124.213[.]232

  • 172.86.73[.]198

URL

  • hxxps://vscode-load-config.vercel[.]app/settings/mac?flag=4

  • hxxps://vscode-settings-config.vercel[.]app/settings/windows?flag=8

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/linux?flag=306

  • hxxps://vscode-helper171-ruby.vercel[.]app/settings/windows?flag=4

  • hxxps://www.vscodeconfig[.]com/settings/mac?flag=1

  • hxxps://www.vscodeconfig[.]com/settings/mac?flag=3

  • hxxps://vscodesettings03kui.vercel[.]app/api/settings/mac

  • hxxps://www.vscodeconfig[.]com/settings/windows?flag=3

  • hxxps://vscode-helper171.vercel[.]app/settings/linux?flag=4

  • hxxps://vscode-load-config.vercel[.]app/settings/linux?flag=4

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/linux?flag=301

  • hxxps://www.vscodeconfig[.]com/settings/mac?flag=4

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/mac?flag=302

  • hxxps://www.vscodeconfig[.]com/settings/linux?flag=1

  • hxxps://vscode-helper171-ruby.vercel[.]app/settings/linux?flag=6

  • hxxps://vscode-toolkit-bootstrap.vercel[.]app/settings/windows?flag=306

  • hxxps://vscode-settings-config.vercel[.]app/settings/linux?flag=606

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/windows?flag=306

  • hxxps://vscode-load.onrender[.]com/settings/linux?flag=5

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/windows?flag=302

  • hxxps://vscode-toolkit-bootstrap.vercel[.]app/settings/mac?flag=306

  • hxxps://vscode-settings-config.vercel[.]app/settings/mac?flag=8

  • hxxps://vscode-helper171-ruby.vercel[.]app/settings/mac?flag=3

  • hxxps://vscode-load-config.vercel[.]app/settings/linux?flag=1

  • hxxps://www.vscodeconfig[.]com/settings/windows?flag=4

  • hxxps://vscode-helper-132.vercel[.]app/settings/windows?flag=4

  • hxxps://vscode-helper-132.vercel[.]app/settings/linux?flag=4

  • hxxps://vscodesettingstask.vercel[.]app/api/settings/windows

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/mac?flag=306

  • hxxps://vscode-load-config.vercel[.]app/settings/windows?flag=1

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/linux?flag=302

  • hxxps://vscode-load.onrender[.]com/settings/windows?flag=5

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/mac?flag=308

  • hxxps://vscode-helper171-ruby.vercel[.]app/settings/windows?flag=6

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/windows?flag=301

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/windows?flag=305

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/mac?flag=305

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/linux?flag=308

  • hxxps://codeviewer-three.vercel[.]app/task/windows?token=6df937fe9011

  • hxxps://vscode-helper171-ruby.vercel[.]app/settings/linux?flag=4

  • hxxps://vscode-helper171-ruby.vercel[.]app/settings/windows?flag=3

  • hxxps://vscodesettingstask.vercel[.]app/api/settings/linux

  • hxxps://vscode-helper171.vercel[.]app/settings/windows?flag=4

  • hxxps://vscode-helper171-ruby.vercel[.]app/settings/linux?flag=3

  • hxxps://codeviewer-three.vercel[.]app/task/windows?token=f93a80304111

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/mac?flag=301

  • hxxps://codeviewer-three.vercel[.]app/task/mac?token=2a643f1b401f

  • hxxps://vscode-load.onrender[.]com/settings/mac?flag=5

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/windows?flag=308

  • hxxps://codeviewer-three.vercel[.]app/task/linux?token=f93a80304111

  • hxxps://vscode-load-config.vercel[.]app/settings/windows?flag=4

  • hxxps://vscode-helper-132.vercel[.]app/settings/mac?flag=4

  • hxxps://codeviewer-three.vercel[.]app/task/mac?token=6df937fe9011

  • hxxps://codeviewer-three.vercel[.]app/task/linux?token=6df937fe9011

  • hxxps://vscodesettingstask.vercel[.]app/api/settings/bootstraplinux

  • hxxps://vscode-settings-config.vercel[.]app/settings/mac?flag=9

  • hxxps://vscode-settings-config.vercel[.]app/settings/linux?flag=9

  • hxxps://vscode-helper171.vercel[.]app/settings/mac?flag=4

  • hxxps://vscode-helper171-ruby.vercel[.]app/settings/mac?flag=6

  • hxxps://vscodesettings03kui.vercel[.]app/api/settings/windows

  • hxxps://vscode-load-config.vercel[.]app/settings/mac?flag=1

  • hxxps://codeviewer-three.vercel[.]app/task/windows?token=2a643f1b401f

  • hxxps://codeviewer-three.vercel[.]app/task/mac?token=f93a80304111

  • hxxps://vscode-settings-config.vercel[.]app/settings/windows?flag=9

  • hxxps://www.vscodeconfig[.]com/settings/windows?flag=1

  • hxxps://vscode-settings-config.vercel[.]app/settings/mac?flag=606

  • hxxps://vscode-toolkit-bootstrap.vercel[.]app/settings/linux?flag=306

  • hxxps://vscodesettings03kui.vercel[.]app/api/settings/linux

  • hxxps://www.vscodeconfig[.]com/settings/linux?flag=4

  • hxxps://vscode-settings-config.vercel[.]app/settings/windows?flag=606

  • hxxps://vscode-settings-bootstrap.vercel[.]app/settings/linux?flag=305

  • hxxps://www.vscodeconfig[.]com/settings/linux?flag=3

  • hxxps://vscode-helper171-ruby.vercel[.]app/settings/mac?flag=4

  • hxxps://vscodesettingstask.vercel[.]app/api/settings/mac

  • hxxps://codeviewer-three.vercel[.]app/task/linux?token=2a643f1b401f

  • hxxps://vscode-settings-config.vercel[.]app/settings/linux?flag=8

Github repository

  • hxxps://github[.]com/veneliteus-dev/casino-game/

  • hxxps://github[.]com/brahmabit/be_challenge_blockchain/

  • hxxps://github[.]com/vnvstore/funtico-labs-assessment-15/

  • hxxps://github[.]com/samuelmeadowbiankah/felina/

  • hxxps://github[.]com/nhonlvsoict/skill-test-main/

  • hxxps://github[.]com/goldendragon68/Bullana/

  • hxxps://github[.]com/ivanwassaf/skill-test/

  • hxxps://github[.]com/SettleMint-Tech-Hub5/SettleMint_Platform/

  • hxxps://github[.]com/veneliteus-dev/exchange-backend/

  • hxxps://github[.]com/0x9x-sketch/Oasis361/

  • hxxps://github[.]com/eastmade/web3project-momo-token/

Appendix C. Search Conditions

Excluded Folders

| 목록 | 목록 |
| --- | --- |
| node_modules | .svg |
| static | .idea |
| license | .lock |
| site-packages | .bin |
| robots | .vscode |
| vendor | .p2 |
| Pods | __MACOSX |
| .git | .angular |
| .github | .yarn |
| .node-gyp | android |
| .nvm .local | cocoapods |
| .cache | homebrew |
| .pyp | xcuserdata |
| .pyi | release |
| .pyenv | debug |
| .qt | x86 |
| .dex | Python |
| __pycache__ | .svn |
| yarn | .android |
| .gradle | cache |
| .cursor | Qt |
| .py | X

| 목록 | 목록 |
| --- | --- |
| node_modules | .svg |
| static | .idea |
| license | .lock |
| site-packages | .bin |
| robots | .vscode |
| vendor | .p2 |
| Pods | __MACOSX |
| .git | .angular |
| .github | .yarn |
| .node-gyp | android |
| .nvm .local | cocoapods |
| .cache | homebrew |
| .pyp | xcuserdata |
| .pyi | release |
| .pyenv | debug |
| .qt | x86 |
| .dex | Python |
| __pycache__ | .svn |
| yarn | .android |
| .gradle | cache |
| .cursor | Qt |
| .py | X

| 목록 | 목록 |
| --- | --- |
| node_modules | .svg |
| static | .idea |
| license | .lock |
| site-packages | .bin |
| robots | .vscode |
| vendor | .p2 |
| Pods | __MACOSX |
| .git | .angular |
| .github | .yarn |
| .node-gyp | android |
| .nvm .local | cocoapods |
| .cache | homebrew |
| .pyp | xcuserdata |
| .pyi | release |
| .pyenv | debug |
| .qt | x86 |
| .dex | Python |
| __pycache__ | .svn |
| yarn | .android |
| .gradle | cache |
| .cursor | Qt |
| .py | X

caption - Excluded Folders

Excluded File Extensions

| 목록 | 목록 |
| --- | --- |
| .exe | .mpeg |
| .dll | .m4p |
| .msi | .m4a |
| .dmg | .m4v |
| .vmdk | .aac |
| .iso | .flac |
| .pkg | .aiff |
| .apk | .qt |
| .xapk | .flv |
| .aar | .swf |
| .ap_ | .pyc |
| .aab | .lock |
| .dex | .psd |
| .class | .pack |
| .rpm | .old |
| .deb | .ppt |
| .ipa | .pptx |
| .dsym | .virtualization |
| .mp4 | .indd |
| .avi | .eps |
| .mp3 | .ai |
| .wmv | .a |
| .wma | .jar |
| .mov | .so |
| .webm | .o |
| .avchd | .wt |
| .mkv | .lib |
| .ogg | .dylib |
| .mpe | .bin |
| .mpv | .ffx |
| .svg | .gem |
| .css | .html |
| .scss | X

| 목록 | 목록 |
| --- | --- |
| .exe | .mpeg |
| .dll | .m4p |
| .msi | .m4a |
| .dmg | .m4v |
| .vmdk | .aac |
| .iso | .flac |
| .pkg | .aiff |
| .apk | .qt |
| .xapk | .flv |
| .aar | .swf |
| .ap_ | .pyc |
| .aab | .lock |
| .dex | .psd |
| .class | .pack |
| .rpm | .old |
| .deb | .ppt |
| .ipa | .pptx |
| .dsym | .virtualization |
| .mp4 | .indd |
| .avi | .eps |
| .mp3 | .ai |
| .wmv | .a |
| .wma | .jar |
| .mov | .so |
| .webm | .o |
| .avchd | .wt |
| .mkv | .lib |
| .ogg | .dylib |
| .mpe | .bin |
| .mpv | .ffx |
| .svg | .gem |
| .css | .html |
| .scss | X

| 목록 | 목록 |
| --- | --- |
| .exe | .mpeg |
| .dll | .m4p |
| .msi | .m4a |
| .dmg | .m4v |
| .vmdk | .aac |
| .iso | .flac |
| .pkg | .aiff |
| .apk | .qt |
| .xapk | .flv |
| .aar | .swf |
| .ap_ | .pyc |
| .aab | .lock |
| .dex | .psd |
| .class | .pack |
| .rpm | .old |
| .deb | .ppt |
| .ipa | .pptx |
| .dsym | .virtualization |
| .mp4 | .indd |
| .avi | .eps |
| .mp3 | .ai |
| .wmv | .a |
| .wma | .jar |
| .mov | .so |
| .webm | .o |
| .avchd | .wt |
| .mkv | .lib |
| .ogg | .dylib |
| .mpe | .bin |
| .mpv | .ffx |
| .svg | .gem |
| .css | .html |
| .scss | X

caption - Excluded File Extensions

autoUploadScript Search String

| 목록 | 목록 |
| --- | --- |
| .keystore | phone |
| database | bank |
| financ | .env |
| env | environment |
| config | configuration |
| configure | .conf |
| .cfg | .ini |
| .properties | .yaml |
| .yml | .toml |
| metamask | phantom |
| bitcoin | ethereum |
| eth | trust |
| wallet | coinbase |
| exodus | ledger |
| trezor | keystore |
| keyring | keychain |
| atomic | electrum |
| mycelium | blockchain |
| bravewallet | rabby |
| coin98 | backpack |
| core | mathwallet |
| solflare | glow |
| keplr | argent |
| martian | petra |
| binance | okx |
| crypto | cryptocurrency |
| hardhat | truffle |
| private | privatekey |
| private_key | private-key |
| privkey | priv_key |
| key | keypair |
| key_pair | key-pair |
| .pem | .p12 |
| .pfx | .jks |
| keystore | .keys |
| keys | .p8 |
| .p7b | .p7c |
| .cer | .crt |
| .cert | cert |
| .der | id_rsa |
| id_dsa | id_ecdsa |
| id_ed25519 | .pub |
| .priv | seed |
| seedphrase | seed_phrase |
| seed-phrase | mnemonic |
| phrase | passphrase |
| pass_phrase | pass-phrase |
| recovery | recoveryphrase |
| recovery_phrase | recovery-phrase |
| backup | backupphrase |
| backup_phrase | backup-phrase |
| 12words | 12_words |
| 12-words | 24words |
| 24_words | 24-words |
| bip39 | bip44 |
| password | passwd |
| pass | pwd |
| credential | credentials |
| auth | authentication |
| token | access_token |
| refresh_token | api_key |
| apikey | api-key |
| apisecret | api_secret |
| api-secret | secret |
| secrets | secretkey |
| secret_key | secret-key |
| masterkey | master_key |
| master-key | masterpassword |
| master_password | master-password |
| account | accounts |
| profile | profiles |
| user | username |
| user_name | user-name |
| login | signin |
| sign_in | sign-in |
| address | addresses |
| tx | transaction |
| transactions | .db |
| .sqlite | .sqlite3 |
| .sql | .mdb |
| .accdb | .dbf |
| .doc | .docx |
| .pdf | .md |
| .markdown | .rtf |
| .odt | .xls |
| .xlsx | .txt |
| text | note |
| notes | memo |
| memos | screenshot |
| screen | snapshot |
| capture | .png |
| .jpg | .jpeg |
| .bmp | .json |
| .js | .ts |
| .jsx | .tsx |
| .csv | .xml |
| .lock | .log |
| .bak | backup |
| .old | .orig |
| .save | .swp |
| .tmp | tmp |
| my | personal |
| vault | safe |
| secure | lock |
| encrypt | decrypt |
| signature | sign |
| certificate | cert |
| identity | session |
| cookie | X

| 목록 | 목록 |
| --- | --- |
| .keystore | phone |
| database | bank |
| financ | .env |
| env | environment |
| config | configuration |
| configure | .conf |
| .cfg | .ini |
| .properties | .yaml |
| .yml | .toml |
| metamask | phantom |
| bitcoin | ethereum |
| eth | trust |
| wallet | coinbase |
| exodus | ledger |
| trezor | keystore |
| keyring | keychain |
| atomic | electrum |
| mycelium | blockchain |
| bravewallet | rabby |
| coin98 | backpack |
| core | mathwallet |
| solflare | glow |
| keplr | argent |
| martian | petra |
| binance | okx |
| crypto | cryptocurrency |
| hardhat | truffle |
| private | privatekey |
| private_key | private-key |
| privkey | priv_key |
| key | keypair |
| key_pair | key-pair |
| .pem | .p12 |
| .pfx | .jks |
| keystore | .keys |
| keys | .p8 |
| .p7b | .p7c |
| .cer | .crt |
| .cert | cert |
| .der | id_rsa |
| id_dsa | id_ecdsa |
| id_ed25519 | .pub |
| .priv | seed |
| seedphrase | seed_phrase |
| seed-phrase | mnemonic |
| phrase | passphrase |
| pass_phrase | pass-phrase |
| recovery | recoveryphrase |
| recovery_phrase | recovery-phrase |
| backup | backupphrase |
| backup_phrase | backup-phrase |
| 12words | 12_words |
| 12-words | 24words |
| 24_words | 24-words |
| bip39 | bip44 |
| password | passwd |
| pass | pwd |
| credential | credentials |
| auth | authentication |
| token | access_token |
| refresh_token | api_key |
| apikey | api-key |
| apisecret | api_secret |
| api-secret | secret |
| secrets | secretkey |
| secret_key | secret-key |
| masterkey | master_key |
| master-key | masterpassword |
| master_password | master-password |
| account | accounts |
| profile | profiles |
| user | username |
| user_name | user-name |
| login | signin |
| sign_in | sign-in |
| address | addresses |
| tx | transaction |
| transactions | .db |
| .sqlite | .sqlite3 |
| .sql | .mdb |
| .accdb | .dbf |
| .doc | .docx |
| .pdf | .md |
| .markdown | .rtf |
| .odt | .xls |
| .xlsx | .txt |
| text | note |
| notes | memo |
| memos | screenshot |
| screen | snapshot |
| capture | .png |
| .jpg | .jpeg |
| .bmp | .json |
| .js | .ts |
| .jsx | .tsx |
| .csv | .xml |
| .lock | .log |
| .bak | backup |
| .old | .orig |
| .save | .swp |
| .tmp | tmp |
| my | personal |
| vault | safe |
| secure | lock |
| encrypt | decrypt |
| signature | sign |
| certificate | cert |
| identity | session |
| cookie | X

| 목록 | 목록 |
| --- | --- |
| .keystore | phone |
| database | bank |
| financ | .env |
| env | environment |
| config | configuration |
| configure | .conf |
| .cfg | .ini |
| .properties | .yaml |
| .yml | .toml |
| metamask | phantom |
| bitcoin | ethereum |
| eth | trust |
| wallet | coinbase |
| exodus | ledger |
| trezor | keystore |
| keyring | keychain |
| atomic | electrum |
| mycelium | blockchain |
| bravewallet | rabby |
| coin98 | backpack |
| core | mathwallet |
| solflare | glow |
| keplr | argent |
| martian | petra |
| binance | okx |
| crypto | cryptocurrency |
| hardhat | truffle |
| private | privatekey |
| private_key | private-key |
| privkey | priv_key |
| key | keypair |
| key_pair | key-pair |
| .pem | .p12 |
| .pfx | .jks |
| keystore | .keys |
| keys | .p8 |
| .p7b | .p7c |
| .cer | .crt |
| .cert | cert |
| .der | id_rsa |
| id_dsa | id_ecdsa |
| id_ed25519 | .pub |
| .priv | seed |
| seedphrase | seed_phrase |
| seed-phrase | mnemonic |
| phrase | passphrase |
| pass_phrase | pass-phrase |
| recovery | recoveryphrase |
| recovery_phrase | recovery-phrase |
| backup | backupphrase |
| backup_phrase | backup-phrase |
| 12words | 12_words |
| 12-words | 24words |
| 24_words | 24-words |
| bip39 | bip44 |
| password | passwd |
| pass | pwd |
| credential | credentials |
| auth | authentication |
| token | access_token |
| refresh_token | api_key |
| apikey | api-key |
| apisecret | api_secret |
| api-secret | secret |
| secrets | secretkey |
| secret_key | secret-key |
| masterkey | master_key |
| master-key | masterpassword |
| master_password | master-password |
| account | accounts |
| profile | profiles |
| user | username |
| user_name | user-name |
| login | signin |
| sign_in | sign-in |
| address | addresses |
| tx | transaction |
| transactions | .db |
| .sqlite | .sqlite3 |
| .sql | .mdb |
| .accdb | .dbf |
| .doc | .docx |
| .pdf | .md |
| .markdown | .rtf |
| .odt | .xls |
| .xlsx | .txt |
| text | note |
| notes | memo |
| memos | screenshot |
| screen | snapshot |
| capture | .png |
| .jpg | .jpeg |
| .bmp | .json |
| .js | .ts |
| .jsx | .tsx |
| .csv | .xml |
| .lock | .log |
| .bak | backup |
| .old | .orig |
| .save | .swp |
| .tmp | tmp |
| my | personal |
| vault | safe |
| secure | lock |
| encrypt | decrypt |
| signature | sign |
| certificate | cert |
| identity | session |
| cookie | X

caption - autoUploadScript Search String

ENKI WhiteHat

ENKI WhiteHat

EnkiWhiteHat
EnkiWhiteHat

Offensive security experts delivering deeper security through an attacker's perspective.

Offensive security experts delivering deeper security through an attacker's perspective.

The Beginning of Flawless Security System, From the Expertise of the No.1 White Hacker

Prepare Before a Security Incident Occurs

The Beginning of Flawless Security System, From the Expertise of the No.1 White Hacker

Prepare Before a Security Incident Occurs

The Beginning of Flawless Security System, From the Expertise of the No.1 White Hacker

Prepare Before a Security Incident Occurs

Subscribe

Find this content useful?
Subscribe to the Enki Letter!

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.

Copyright © 2025. ENKI WhiteHat Co., Ltd. All rights reserved.