{"affected":[{"database_specific":{"cwes":[{"cweId":"CWE-506","description":"The product contains code that appears to be malicious in nature.","name":"Embedded Malicious Code"}],"indicators":{"evidence_files":[{"path":"ext/xrp_ledger_utils/extconf.rb","sha256":"10218e975f54a4f11fe3954e1b584a5f05054003bf5773c3c2b8cceaa74ba763","tlsh":"9751775acf8359e55aa1c0c045798012faa3ab0a50646875f3ee0868ff59b26c0f12fe"},{"path":"metadata.yaml","sha256":"8cced2a2df8fab52c1e109163a9bfc379e32b69e00bbb1e4024e5abdf720eaa6","tlsh":"1a11f380a5c3fc3ff21ad1ee58442207f3b2e308fe5538148eeb919b93941ad6707161"}]},"source":"https://github.com/ossf/malicious-packages/blob/main/osv/malicious/rubygems/xrp-ledger-utils/MAL-2026-17802.json"},"package":{"ecosystem":"RubyGems","name":"xrp-ledger-utils","purl":"pkg:gem/xrp-ledger-utils"},"versions":["0.9.1"]}],"credits":[{"contact":["inspector-research@amazon.com"],"name":"Amazon Inspector","type":"FINDER"},{"contact":["https://github.com/ossf/package-analysis","https://openssf.slack.com/channels/package_analysis"],"name":"OpenSSF: Package Analysis","type":"FINDER"}],"database_specific":{"malicious-packages-origins":[{"id":"IN-MAL-2026-021370","import_time":"2026-10-11T14:17:59.973303526Z","modified_time":"2026-10-11T13:49:05Z","sha256":"1d8cf595b60954811e6adfd0c4a241c696d326b42baf1ed2e7b163e720db44c4","source":"amazon-inspector","versions":["0.9.1"]},{"import_time":"2026-10-13T23:14:39.288674783Z","modified_time":"2026-10-11T06:55:27Z","sha256":"0710fa7f9a5c9d736a6305232a414769cc1e5896653a55bb9e3a02f7b7a0c026","source":"ossf-package-analysis","versions":["0.9.1"]}]},"details":"\n---\n_-= Per source details. Do not edit below this line.=-_\n\n## Source: amazon-inspector (1d8cf595b60954811e6adfd0c4a241c696d326b42baf1ed2e7b163e720db44c4)\nThe gem's native extension builder ext/extconf.rb decodes a base64-embedded Ruby payload and eval()s it inside a double-forked, detached child after a randomized 20-40 minute sleep. The payload opens a TCP connection to the hardcoded bare-IP C2 at 45.138.12.177:8089, pipes the socket to /bin/sh, and reconnects in a loop, providing an interactive remote shell on the installer's host. Execution is gated by anti-analysis checks that skip CI runners, sandboxed/ephemeral hosts, synthetic usernames, and fresh VMs, and only fires when developer-workstation indicators are present (~/.ssh, ~/.gitconfig, ~/.npmrc, ~/.gem/credentials, ~/.bundle). The shipped library is an inert stub (build_id='ok', healthy?=true), the README is for an unrelated project ('bitcoin-rpc-lite'), and the Makefile target is bitcoin_rpc_lite_native, so the package has no legitimate advertised functionality; the install-time dropper is its sole purpose.\n\n## Source: ossf-package-analysis (0710fa7f9a5c9d736a6305232a414769cc1e5896653a55bb9e3a02f7b7a0c026)\nThe OpenSSF Package Analysis project identified 'xrp-ledger-utils' @ 0.9.1 (rubygems) as malicious.\n\nIt is considered malicious because:\n\n- The package executes one or more commands associated with malicious behavior.\n","id":"MAL-2026-17802","modified":"2026-10-13T23:30:05.046855932Z","published":"2026-10-11T06:55:27Z","references":[{"type":"PACKAGE","url":"https://rubygems.org/gems/xrp-ledger-utils/versions/0.9.1"}],"schema_version":"1.9.0","summary":"Malicious code in xrp-ledger-utils (RubyGems)"}