Analysis

  • max time kernel
    1s
  • max time network
    129s
  • platform
    ubuntu-18.04_amd64
  • resource
    ubuntu1804-amd64-20260513-en
  • resource tags

    arch:amd64arch:i386image:ubuntu1804-amd64-20260513-enkernel:4.15.0-213-genericlocale:en-usos:ubuntu-18.04-amd64system
  • submitted
    18/10/2026, 12:22

General

  • Target
    install.sh
  • Size 25KB
  • Sample261018-pkd4jsxt2p
  • SHA256 6eaf139e16d45849bebc4a7de0dbc2992fd3b3a86a3f37bf7922b685f3a60d9e
  • MD5 SHA1 SHA512 SSDEEP TLSH

Malware Config

Signatures

  • File and Directory Permissions Modification 1 TTPs 1 IoCs

    Adversaries may modify file or directory permissions to evade defenses.

  • Executes dropped EXE 2 IoCs
  • Deobfuscate/Decode Files or Information 1 TTPs 1 IoCs

    Adversaries may deobfuscate or decode files or information to evade detection mechanisms.

  • Changes its process name 2 IoCs
  • Enumerates kernel/hardware configuration 1 TTPs 4 IoCs

    Reads contents of /sys virtual filesystem to enumerate system information.

  • Reads runtime system information 10 IoCs

    Reads data from /proc virtual filesystem.

  • System Network Configuration Discovery 1 TTPs 2 IoCs

    Adversaries may gather information about the network configuration of a system.

  • Writes file to tmp directory 4 IoCs

    Malware often drops required files in the /tmp directory.

Processes

  • /tmp/install.sh
    /tmp/install.sh
    1⤵
    • Executes dropped EXE
    PID:1497
    • /usr/bin/curl
      curl -s https://registry.npmjs.org/vite-plus/latest
      2⤵
        PID:1500
      • /bin/grep
        grep -q "\"error\""
        2⤵
          PID:1508
        • /bin/grep
          grep -q "\"version\" *:"
          2⤵
            PID:1510
          • /bin/grep
            grep -o "\"version\" *: *\"[^\"]*\""
            2⤵
              PID:1513
            • /usr/bin/cut
              cut "-d\"" -f4
              2⤵
                PID:1515
              • /usr/bin/head
                head -1
                2⤵
                  PID:1514
                • /bin/uname
                  uname -s
                  2⤵
                    PID:1518
                  • /bin/uname
                    uname -m
                    2⤵
                      PID:1520
                    • /usr/bin/getconf
                      getconf GNU_LIBC_VERSION
                      2⤵
                        PID:1522
                      • /usr/bin/curl
                        curl -s "https://registry.npmjs.org/@voidzero-dev%2Fvite-plus-cli-linux-x64-gnu/1.3.0"
                        2⤵
                          PID:1527
                        • /usr/bin/awk
                          awk " function fail_json(message) { print message > \"/dev/stderr\" exit 2 } function skip_whitespace( c) { while (json_pos <= json_length) { c = substr(json_text, json_pos, 1) if (c == \" \" || c == \"\\t\" || c == \"\\r\" || c == \"\\n\") { json_pos++ } else { return } } } function parse_string( result, c, escaped, hex, code, i) { skip_whitespace() if (substr(json_text, json_pos, 1) != \"\\\"\") { fail_json(\"expected JSON string\") } json_pos++ while (json_pos <= json_length) { c = substr(json_text, json_pos, 1) json_pos++ if (c == \"\\\"\") { return result } if (c == \"\\\\\") { if (json_pos > json_length) { fail_json(\"unterminated JSON escape\") } escaped = substr(json_text, json_pos, 1) json_pos++ if (escaped == \"\\\"\" || escaped == \"\\\\\" || escaped == \"/\") { result = result escaped } else if (escaped == \"b\" || escaped == \"f\" || escaped == \"n\" || escaped == \"r\" || escaped == \"t\") { # Keep control escapes printable so extracted values cannot inject lines. result = result \"\\\\\" escaped } else if (escaped == \"u\") { hex = substr(json_text, json_pos, 4) if (length(hex) != 4 || hex ~ /[^0-9A-Fa-f]/) { fail_json(\"invalid JSON unicode escape\") } code = 0 for (i = 1; i <= 4; i++) { code = code * 16 + index(\"0123456789abcdef\", tolower(substr(hex, i, 1))) - 1 } # Decode printable ASCII once, including all SRI characters and # inspected keys. Keep other escapes printable so control characters # cannot inject lines into the extracted metadata. if (code >= 32 && code <= 126) { result = result sprintf(\"%c\", code) } else { result = result \"\\\\u\" hex } json_pos += 4 } else { fail_json(\"invalid JSON escape\") } } else { if (c ~ /[[:cntrl:]]/) { fail_json(\"unescaped control character in JSON string\") } result = result c } } fail_json(\"unterminated JSON string\") } function is_object_key(depth, key) { return path_kind[depth] == \"object-key\" && path_key[depth] == key } function remember_string(depth, value) { if (depth == 2 && is_object_key(1, \"dist\") && is_object_key(2, \"tarball\")) { if (++tarball_count != 1) fail_json(\"duplicate dist.tarball\") tarball = value } else if (depth == 2 && is_object_key(1, \"dist\") && is_object_key(2, \"integrity\")) { integrity = value } else if (depth == 4 && is_object_key(1, \"dist\") && is_object_key(2, \"attestations\") && is_object_key(3, \"provenance\") && is_object_key(4, \"predicateType\")) { if (++predicate_count != 1) fail_json(\"duplicate provenance predicateType\") predicate_type = value } else if (depth == 1 && is_object_key(1, \"error\")) { if (++error_count != 1) fail_json(\"duplicate registry error\") registry_error = value } } function parse_number( start, value, c) { start = json_pos while (json_pos <= json_length) { c = substr(json_text, json_pos, 1) if (c ~ /[-+0-9.eE]/) json_pos++ else break } value = substr(json_text, start, json_pos - start) if (value !~ /^-?(0|[1-9][0-9]*)(\\.[0-9]+)?([eE][+-]?[0-9]+)?\$/) { fail_json(\"invalid JSON number\") } } function parse_literal(literal) { if (substr(json_text, json_pos, length(literal)) != literal) { fail_json(\"invalid JSON literal\") } json_pos += length(literal) } function parse_array(depth, c, child_depth) { json_pos++ skip_whitespace() if (substr(json_text, json_pos, 1) == \"]\") { json_pos++ return } while (1) { child_depth = depth + 1 path_kind[child_depth] = \"array-item\" path_key[child_depth] = \"\" parse_value(child_depth) delete path_kind[child_depth] delete path_key[child_depth] skip_whitespace() c = substr(json_text, json_pos, 1) if (c == \"]\") { json_pos++ return } if (c != \",\") fail_json(\"expected comma in JSON array\") json_pos++ } } function parse_object(depth, key, child_depth, c, object_id) { json_pos++ object_id = ++object_count skip_whitespace() if (substr(json_text, json_pos, 1) == \"}\") { json_pos++ return } while (1) { key = parse_string() if ((object_id SUBSEP key) in object_keys) { fail_json(\"duplicate key in JSON object\") } object_keys[object_id SUBSEP key] = 1 skip_whitespace() if (substr(json_text, json_pos, 1) != \":\") { fail_json(\"expected colon in JSON object\") } json_pos++ child_depth = depth + 1 path_kind[child_depth] = \"object-key\" path_key[child_depth] = key parse_value(child_depth) delete path_kind[child_depth] delete path_key[child_depth] skip_whitespace() c = substr(json_text, json_pos, 1) if (c == \"}\") { json_pos++ return } if (c != \",\") fail_json(\"expected comma in JSON object\") json_pos++ } } function parse_value(depth, c, value) { skip_whitespace() c = substr(json_text, json_pos, 1) if (c == \"{\") { parse_object(depth) } else if (c == \"[\") { parse_array(depth) } else if (c == \"\\\"\") { value = parse_string() remember_string(depth, value) } else if (c == \"t\") { parse_literal(\"true\") } else if (c == \"f\") { parse_literal(\"false\") } else if (c == \"n\") { parse_literal(\"null\") } else if (c == \"-\" || c ~ /[0-9]/) { parse_number() } else { fail_json(\"invalid JSON value\") } } { json_text = json_text \$0 \"\\n\" } END { json_length = length(json_text) json_pos = 1 parse_value(0) skip_whitespace() if (json_pos <= json_length) fail_json(\"unexpected data after JSON value\") print tarball print predicate_type print registry_error print integrity } "
                          2⤵
                          • Reads runtime system information
                          • System Network Configuration Discovery
                          PID:1536
                        • /bin/sed
                          sed -n 1p
                          2⤵
                          • Reads runtime system information
                          PID:1539
                        • /bin/sed
                          sed -n 2p
                          2⤵
                          • Reads runtime system information
                          PID:1542
                        • /bin/sed
                          sed -n 3p
                          2⤵
                          • Reads runtime system information
                          PID:1545
                        • /bin/sed
                          sed -n 4p
                          2⤵
                          • Reads runtime system information
                          PID:1548
                        • /bin/mktemp
                          mktemp -d
                          2⤵
                            PID:1550
                          • /bin/mktemp
                            mktemp
                            2⤵
                            • Writes file to tmp directory
                            PID:1555
                          • /usr/bin/curl
                            curl -fsSL "https://registry.npmjs.org/@voidzero-dev/vite-plus-cli-linux-x64-gnu/-/vite-plus-cli-linux-x64-gnu-1.3.0.tgz" -o /tmp/tmp.bWvJvEaswy
                            2⤵
                            • Writes file to tmp directory
                            PID:1556
                          • /usr/bin/sha512sum
                            sha512sum
                            2⤵
                              PID:1560
                            • /usr/bin/tr
                              tr -d " \\n"
                              2⤵
                                PID:1565
                              • /usr/bin/od
                                od -An -v -tx1
                                2⤵
                                  PID:1564
                                • /usr/bin/base64
                                  base64 -d
                                  2⤵
                                  • Deobfuscate/Decode Files or Information
                                  PID:1563
                                • /bin/tar
                                  tar xzf /tmp/tmp.bWvJvEaswy -C /tmp/tmp.vc3eJCyt42 "--strip-components=1"
                                  2⤵
                                  • Reads runtime system information
                                  • System Network Configuration Discovery
                                  • Writes file to tmp directory
                                  PID:1566
                                  • /usr/local/sbin/gzip
                                    gzip -d
                                    3⤵
                                      PID:1567
                                    • /usr/local/bin/gzip
                                      gzip -d
                                      3⤵
                                        PID:1567
                                      • /usr/sbin/gzip
                                        gzip -d
                                        3⤵
                                          PID:1567
                                        • /usr/bin/gzip
                                          gzip -d
                                          3⤵
                                            PID:1567
                                          • /sbin/gzip
                                            gzip -d
                                            3⤵
                                              PID:1567
                                            • /bin/gzip
                                              gzip -d
                                              3⤵
                                                PID:1567
                                            • /bin/rm
                                              rm -f /tmp/tmp.bWvJvEaswy
                                              2⤵
                                                PID:1568
                                              • /bin/chmod
                                                chmod +x /tmp/tmp.vc3eJCyt42/vp
                                                2⤵
                                                • File and Directory Permissions Modification
                                                PID:1569
                                              • /tmp/tmp.vc3eJCyt42/vp
                                                /tmp/tmp.vc3eJCyt42/vp --help
                                                2⤵
                                                • Changes its process name
                                                • Enumerates kernel/hardware configuration
                                                • Reads runtime system information
                                                PID:1571
                                              • /tmp/tmp.vc3eJCyt42/vp
                                                /tmp/tmp.vc3eJCyt42/vp
                                                2⤵
                                                • Changes its process name
                                                • Enumerates kernel/hardware configuration
                                                • Reads runtime system information
                                                PID:1574
                                              • /bin/rm
                                                rm -rf -- /tmp/tmp.vc3eJCyt42
                                                2⤵
                                                  PID:1576

                                              Network

                                                    MITRE ATT&CK Enterprise v16

                                                    Replay Monitor

                                                    Loading Replay Monitor...

                                                    Downloads

                                                    package.json

                                                    • Path /tmp/tmp.vc3eJCyt42/package.json
                                                    • Size 380B
                                                    • SHA256 ee6e46c86b981cdc5e38883bab5b2c3db79c2e43a56559857cfb410d3169e43d
                                                    • MD5 SHA1 SHA512 TLSH

                                                    vp

                                                    • Path /tmp/tmp.vc3eJCyt42/vp
                                                    • Size 10.2MB
                                                    • SHA256 6846c5403b9d3e991ebdd8b699d62c7d384707e9f95cf7f5aa1a357956b7ecbd
                                                    • MD5 SHA1 SHA512 SSDEEP TLSH