Phylum’s Monthly Malware Report: April 2022 – Malware Magnified

Note: Veracode acquired Phylum in January 2025, after this blog was published, and it has been migrated to Veracode’s blog.

In order to combat the massive uptick in software supply chain attacks, and proactively defend against software supply chain-borne threats from the open-source ecosystem, Phylum has been purpose-built to provide near-real-time, proactive analysis of packages as they are published. Given how vast these ecosystems are today, it is apparent that simply hiring security talent to attempt analysis is a losing battle. In the past 30 days, Phylum has processed a total of 647,928 packages across three ecosystems (NPM, PyPI, and RubyGems) – with an average of 20,933 packages per day, which amounts to the analysis of an average of 3,219,943 source files every 24 hours. This adds up to 99,818,244 total files in the last month.

Repository Statistics
Package RegistryNo. of Packages
NPM555,115
PyPI84,982
RubyGems8,831
Total Package Analysis
Analysis, last 30 daysCount
Total Packages Analyzed647,928
Total Files Examined99,818,244
Malicious Packages Identified714
Breakout by File Type
FiletypeCount
TypeScript37,878,699
JavaScript48,636,490
ECMAScript modules1,531,637
Ruby1,052,107
Python8,146,348
TSX257280
CommonJS modules257,280
Bash106,579
Java175,499
Total99,818,244

Phylum’s heuristics, analytics, and machine learning models then combed through these packages as they were published, resulting in the identification and conviction of 714 malicious packages in the last 30 days. Results in an average were returned within 10.9 minutes of publication.

Many of these packages were tied to existing campaigns (detailed below), along with some new (apparent) rogue actors.

Malware Spotlight

Based upon the 714 malicious packages identified in April, the Malware Spotlight needs a full write-up. Full spotlight and commentary to be released in the coming days!!

Packages of Interest
adalagrifood-farmingadd-position
addon-actionsai-anomaly-detectorai-document-translator
addon-linksagrifood-farming-restarm-advisor
arm-analysisservicesai-document-translator-restantani-ui
arm-apimanagementany-vegaarm-appconfiguration
api-extractorapplicationinsights-analyticsapplicationinsights-analytics-js
arm-appinsightsarm-appplatformarm-appservice
applicationinsights-commonapplicationinsights-dependenciesapplicationinsights-dependencies-js
arm-attestationarm-authorizationarm-avs
applicationinsights-propertiesapplicationinsights-properties-jsapplicationinsights-react-js
applicationinsights-shimsapplicationinsights-webarm-kusto
arm-lockarm-policyinsightsarm-securityinsights
arm-azurestackarm-azurestackhciarm-batch
arm-billingarm-botservicearm-cdn
asset_cli_toolautocomplete-coreautocomplete-preset-algolia
autocomplete-sharedautorest-schemasautorest.gotest
autorest.testmodelerautorest.testserverazure-agrifood
arm-changeanalysisarm-cognitiveservicesarm-commerce
azure-agrifood-farming-samples-jsazure-agrifood-farming-samples-tsazure-ai
azure-ai-anomaly-detector-samples-jsazure-ai-anomaly-detector-samples-tsarm-commitmentplans
arm-communicationarm-computearm-confluent
azure-ai-form-recognizer-samples-jsazure-ai-form-recognizer-samples-tsarm-consumption
azure-ai-text-analytics-samples-tsazure-app-configuration-samples-jsazure-app-configuration-samples-ts
azure-communication-identity-samples-jsazure-communication-identity-samples-tsazure-communication-phone-numbers-samples-ts
azure-communication-short-codes-samples-jsazure-communication-short-codes-samples-tsazure-communication-sms-samples-js
azure-communication-sms-samples-tsazure-confidential-ledger-samples-jsazure-core-rest-pipeline-samples-js
arm-containerinstancearm-containerregistryarm-containerservice
arm-cosmosdbarm-customerinsightsarm-databox
azure-dataazure-digitalazure-digital-twins-core-samples-ts
azure-event-hubs-expressazure-event-hubs-samples-browserazure-event-hubs-samples-js
azure-event-processorazure-event-processor-host-samples-bowserazure-event-processor-host-samples-express
azure-event-processor-host-samples-jsazure-eventgrid-samples-tsazure-identity-samples-js
azure-iotazure-iot-modelsrepository-samples-tsazure-iot-ux-baseline
arm-databoxedgearm-databricksarm-datacatalog
azure-iot-ux-fluent-controlsazure-js-dev-toolsazure-keyvault-admin-samples-js
azure-keyvault-certificates-samples-tsazure-keyvault-keys-samples-jsazure-keyvault-keys-samples-ts
arm-datadogarm-datafactoryarm-datalake-analytics
arm-datamigrationarm-deploymentmanagerarm-desktopvirtualization
arm-deviceprovisioningservicesarm-devspacesarm-devtestlabs
azure-mixed-reality-authentication-samples-tsazure-mock-hub-samples-jsazure-mock-hub-samples-ts
azure-monitor-opentelemetryazure-monitor-opentelemetry-exporter-samples-tsazure-monitor-query-samples-ts
azure-purview-account-samples-jsazure-purview-account-samples-tsazure-purview-administration-samples-js
azure-purview-scanning-samples-jsazure-purview-scanning-samples-tsazure-quantum-jobs-samples-js
azure-schemaazure-schema-registry-avro-samples-tsazure-schema-registry-samples-js
azure-schema-registry-samples-tsazure-sdk-for-java-codegenazure-search-documents-samples-js
azure-search-documents-samples-tsazure-service-bus-samples-jsazure-service-bus-samples-ts
azure-storage-blob-changefeed-samples-jsazure-storage-blob-changefeed-samples-tsazure-storage-blob-samples-js
azure-storage-blob-samples-tsazure-storage-file-share-samples-jsazure-synapse
azure-synapse-access-control-samples-tsazure-template-samples-tsazure-video-analyzer-edge-samples-js
azure-video-analyzer-edge-samples-tsazure-webazure-web-pubsub-express-samples-ts
azure-web-pubsub-samples-jsbabel-plugin-replace-jsx-attribute-valuearm-digitaltwins
arm-dnsarm-dnsresolverarm-domainservices
arm-eventgridarm-eventhubarm-extendedlocation
babel-plugin-svg-dynamic-titlebanana-modulebatch-execute
bfx-hf-signalsbfx-hf-strategy-execbottom-tabs
arm-featuresarm-frontdoorarm-hanaonazure
arm-hdinsightarm-healthbotarm-healthcareapis
build-ng-packagrbuild-optimizercache-browser-local-storage
cache-commonchannel-postmessagecheck-treeshaking
ci-detectarm-hybridcomputearm-hybridkubernetes
arm-imagebuilderarm-iotcentralarm-iothub
ci-detectcli-debugger-uicli-hermes
cli-microsoft365cli-platform-androidcli-platform-ios
cli-server-apiclient-accountclient-recommendation
arm-keyvaultarm-kubernetesconfigurationarm-labservices
arm-linksarm-loadtestservicearm-locks
arm-logicarm-machinelearningcomputearm-machinelearningexperimentation
collect-uncommittedcollect-updatescommunication-signaling
compat-datacompiler-clicompiler_gym-frontend
confidential-ledger-restconfig-arraycontext-base
core-client-lrocore-client-pagingcore-client-rest
cosmos-language-servicecreate-cache-key-functioncreate-free-dazaar-core
cspell-typesdashboard-isolated-widget-accessordate-time-utilities
dazaar-card-publisherdazaar-clidazaar-guild
dazaar-paymentdescribe-refdirectory-listing
disparity-colorseslint-parsereslintsprinker
exchange_clientsfilter-optionsfilter-packages
first-with-side-effectfloating-point-hex-parserflow-dev-tools
fluent-themefontawesome-common-typesfoundation-legacy
fourth-with-side-effectfree-solid-svg-iconsgdn-usedotnet
get-npm-exec-optsglobal-optionsgym-frontend
habitat-simheft-config-filehello2world2here
helper-annotatehelper-api-errorhelper-builder-binary-assignment-operator-visitor
helper-builder-react-jsxhelper-builder-react-jsx-experimentalhelper-call-delegate
helper-code-framehelper-compilation-targetshelper-create-class-features-plugin
helper-define-polyfill-providerhelper-environment-visitorhelper-explode-assignable-expression
helper-fsmhelper-function-namehelper-member-expression-to-functions
helper-module-contexthelper-module-transformshelper-numbers
helper-optimise-call-expressionhelper-regexhelper-remap-async-to-generator
helper-replace-supershelper-simple-accesshelper-skip-transparent-expression-wrappers
helper-split-export-declarationhelper-validator-identifierhelper-wasm-bytecode
helper-wrap-functionhypercore-logs-benchmarkhyperion-history
identity-browseridentity-browser-manualinstalled-package-contents
iot-cardboard-jsiot-device-update-restis-prop-valid
java.androidjava.fluentjava.fluentnamer
java.preprocessorjest-checkjs-sdk-release-tools
jsdoccommentjson-ref-readersjupyter-widgets
karma-coverage-coffee-examplekubernetestestlanguage-service
language-service-nextlib-js-util-currencieslib-js-util-marshal
lib-js-util-mathlib-js-util-promiselib-js-util-shard
lib-util-err-jslink-binsload-nyc-config
make-typed-requestmap-sourcesmap-workspaces
megarepomephisto-review-testmetavuln-calculator
metro-whateverminirtsmsal-browser
msal-commonmsal-node-extensionsmyhashringimplementation
mythsname-from-foldernode-core-library
node16nodehoundopenapi-tools-common
otpleasepackage-binspackage-deps-hash
pkg_with_mainpkg_with_nested_mainpkg_with_relative_main
platform-browser-dynamicplatform-expressplugin-bugfix-v8-spread-parameters-in-optional-chaining
plugin-commonjsplugin-enterprise-restplugin-inject
plugin-jsonplugin-paginate-restplugin-proposal-async-generator-functions
plugin-proposal-class-propertiesplugin-proposal-dynamic-importplugin-proposal-export-default-from
plugin-proposal-export-namespace-fromplugin-proposal-json-stringsplugin-proposal-logical-assignment-operators
plugin-proposal-nullish-coalescing-operatorplugin-proposal-numeric-separatorplugin-proposal-optional-catch-binding
plugin-proposal-optional-chainingplugin-proposal-private-property-in-objectplugin-proposal-unicode-property-regex
plugin-svgoplugin-syntax-async-generatorsplugin-syntax-bigint
plugin-syntax-decoratorsplugin-syntax-export-namespace-fromplugin-syntax-flow
plugin-syntax-import-metaplugin-syntax-jsxplugin-syntax-logical-assignment-operators
plugin-syntax-object-rest-spreadplugin-syntax-private-property-in-objectplugin-syntax-typescript
plugin-transform-block-scoped-functionsplugin-transform-block-scopingplugin-transform-classes
plugin-transform-computed-propertiesplugin-transform-exponentiation-operatorplugin-transform-for-of
plugin-transform-function-nameplugin-transform-literalsplugin-transform-member-expression-literals
plugin-transform-modules-amdplugin-transform-modules-systemjsplugin-transform-modules-umd
plugin-transform-named-capturing-groups-regexplugin-transform-new-targetplugin-transform-object-super
plugin-transform-property-literalsplugin-transform-react-display-nameplugin-transform-react-jsx
plugin-transform-react-jsx-developmentplugin-transform-react-jsx-selfplugin-transform-react-pure-annotations
plugin-transform-reserved-wordsplugin-transform-runtimeplugin-transform-shorthand-properties
plugin-transform-spreadplugin-transform-sticky-regexplugin-transform-typeof-symbol
plugin-transform-typescriptplugin-transform-unicode-escapesplugin-transform-unicode-regex
pluginutilspresentational-componentspreset-flow
preset-modulespreset-typescriptpulse-till-done
purview-administration-restpurview-catalog-restpurview-scanning-rest
query-graphreact-vis-masterread-modules-dir
read-project-manifestregression-testrelay-compiler-playground-tests
remappingrequest-errorrequester-browser-xhr
requester-node-httprest-api-specs-scriptsrig-package
rimraf-dirringpop-uirun-lifecycle
run-topologicallyrush-amazon-s3-build-cache-pluginrush-azure-storage-build-cache-plugin
rush-librush-sdksamples-web-workers-js
scope-managersdk-trace-basesdk-trace-node
semantic-conventionssettingregistrysinonjs__fake-timers
spectral-corespectral-formatsspectral-parsers
spectral-ref-resolverspectral-ruleset-migratorspectral-runtime
static-web-apps-clistorage-filestream-collator
stress-test-track-2swagger-validation-commonsymlink-binary
synapse-access-control-1synapse-access-control-resttest-credential
test-recorder-newtest-sequencertesting-library__jest-dom
textvqatool-cachetransform-vega
ts-command-lineufx-uiungap__url-search-params
util-hex-encodingwasm-editwast-printer
write-log-filewrite-project-manifestarm-machinelearningservices
arm-managedapplicationsarm-managementgroupsarm-managementpartner
arm-maps arm-mariadbarm-marketplaceorderingarm-mediaservices
arm-migratearm-mixedrealityarm-mobilenetwork
arm-monitorarm-msiarm-mysql
arm-netapparm-networkarm-notificationhubs
arm-oeparm-operationalinsightsarm-operations
arm-orbitalarm-peeringarm-policy
arm-portalarm-postgresqlarm-postgresql-flexible
arm-powerbidedicatedarm-powerbiembeddedarm-privatedns
arm-purviewarm-quotaarm-recoveryservices
arm-recoveryservices-siterecoveryarm-recoveryservicesbackuparm-rediscache
arm-redisenterprisecachearm-relayarm-reservations
arm-resourcegrapharm-resourcehealtharm-resourcemover
arm-resourcesarm-resources-subscriptionsarm-search
arm-securityarm-serialconsolearm-servicebus
arm-servicefabricarm-servicefabricmesharm-servicemap
arm-signalrarm-sqlarm-sqlvirtualmachine
arm-storagearm-storagecachearm-storageimportexport
arm-storagesyncarm-storsimple1200seriesarm-storsimple8000series
arm-streamanalyticsarm-subscriptionsarm-support
arm-synapsearm-templatespecsarm-timeseriesinsights
arm-trafficmanagerarm-videoanalyzerarm-visualstudio
arm-vmwarecloudsimplearm-webpubsubarm-webservices
arm-workspacescadl-autorestcadl-azure-core
cadl-azure-resource-managercadl-playgroundcadl-providerhub
cadl-providerhub-controllercadl-providerhub-templates-contosocadl-samples
codemodelcommunication-chatcommunication-common
communication-identitycommunication-network-traversalcommunication-phone-numbers
communication-short-codescommunication-smsconfidential-ledger
core-amqpcore-asynciterator-polyfillcore-auth
core-client-1core-httpcore-http-compat
core-lrocore-pagingcore-rest-pipeline
core-tracingcore-xmldeduplication
digital-twins-coredll-docsdtdl-parser
eslint-config-cadleslint-plugin-azure-sdkeventhubs-checkpointstore-blob
eventhubs-checkpointstore-tableextension-basehelloworld123ccwq
identity-cache-persistenceidentity-vscodeiot-device-update
iot-device-update-1iot-modelsrepositorykeyvault-admin
mixed-reality-authenticationmixed-reality-remote-renderingmodelerfour
monitor-opentelemetry-exporteroai2-to-oai3openapi3
opentelemetry-instrumentation-azure-sdkpnpmfile.jsprettier-plugin-cadl
purview-administrationpurview-catalogpurview-scanning
quantum-jobsstorage-blob-changefeedstorage-file-datalake
storage-queuesynapse-access-controlsynapse-artifacts
synapse-managed-private-endpointssynapse-monitoringsynapse-spark
test-public-packagestest-utils-perftesting-recorder-new
testmodelervideo-analyzer-edgevideojs-wistia
web-pubsubweb-pubsub-express 
uber-blue-20airbnb-logo-whiteuber-white-10
packmetuber-originuber-source
uber-debugairbnb-i18npod-smartphone-api
uber-client-nameuber-device-osuber-client-version
uber-blackuber-developersuber-black-60
useoctoclibancolombia-design-systembancolombia-design-system
bancolombia-design-systemuber-chevron-titlemyhood
uber-eats-food-deliveryuber-device-languagepackage-inherit
uber-blue-10uber-uuiduber-eats
uber-poetairbnb-for-work-sectionsepic-ue-themes-la
uber-blue-60uber-researchuber-us-insurance
uber-offeringsuber-white-20uber-web
uber-black-80uber-searchfield-containeruber-region-id
uber-xhruber-one-geniepod-smartphone-api
airbnb-for-workmailjet-react-componentsuber-listen
uber-fontslogic-lib-empairbnb-hyperloop
uber-mobileuber-screenflow-client-versionuber-black-40
jetpack-configuber-deviceuber-set-cookie-v2
uber-gouber-blue-120uber-token
uber-logouber-xpsuber-device-epoch
uber-device-location-altitudeuber-driveuber-ride
airbnb-jitney-schemasuber-for-business-product-recap-2021uber-partner-widget-localiza
uber-white-120com.unity.ai.navigation.componentsuber-logo-desc
airbnb-bootstrap-datauber-iconsuber-eats-app
uber-logo-titlenautilus-commerceuber-electric-scooter
uber-whiteuber-one-logged-outuber-freight-2022-market-outlook
jetpack-configjetpack-configtesteaaa
uber-device-idsuber-commonuber-demand-channel
qjwtairbnb-org-sectionsuber-et-uber-eats
uber-device-idqjwtuber-white-80
uber-on-way-to-hospitaluber-app-variantuber-blue
uber-blue-80uber-oneuber-push-service
airbnb-logo-reduber-device-modeluber-freight-customer-story
jitsi-meet-reduxuber-client-sessionuber-com
uber-black-90bsd-global-nav-design-uinotepadplusplus-keybindings
uber-white-60uber-blue-40uber-white-40
push-package-actionairbnb-dls-webqjwt
uber-chevron-descuber-open-summit-sofiauber-freight-h2-2021-market-insights
uber-black-95  

Why Phylum & What’s Coming Next…

Phylum’s capabilities extend beyond pure source code analysis. We have constructed authorship models that, in combination with other metrics, allow us to identify odd behaviors around commits and activity. We analyze maintainer information for a package, allowing us to spot packages that have recently changed ownership that may be at risk for the introduction of malware (as was the case with even-stream in 2018).

As we look forward, we are imminently preparing the release of C#/Nuget and Java/Maven support. In addition to this, we are pushing hard to increase both the sophistication and number of our heuristics and analytics.

Phylum, at its core, is a risk detection system focusing on the software supply chain. Unlike other SCA products that focus nearly exclusively on well-known issues, we are looking for the unknown unknowns – the subtle modifications to a software package that will surreptitiously exfiltrate keys to your critical infrastructure. We do this at the scale of open source, tackling the problem in an automated fashion, to make software supply chain security proactive instead of merely reactive.

To learn more about Phylum’s automated malware identification capability and how we support secure and efficient use of open-source software please contact us for a conversation.