On 16 March, 20 days after Russia invaded Ukraine, users of the Vue.js development framework were panicking. Vue is a set of tools that makes it easier for developers to build interfaces for websites and web applications, including at companies like Facebook, Netflix and Nintendo. According to BuiltWith, it powers 19.8 per cent of the world’s biggest 10,000 websites.
So, what does a popular programming tool have in common with the war in Ukraine? Under the hood, Vue, like all tools of its kind, relies on a bundle of other software packages that it automatically downloads. Software packages make it easier for programmers to add functionality to their applications without having to code it from scratch.
In this case, Vue included a dependency on a package called “node-ipc”, whose developer decided to add a small amount of code that would create a text file containing anti-war messages on the desktops of those who use it. But if the package was installed on a device with a Russian or Belarussian IP address, it would also start wiping files from the device and replacing them with a heart emoji.
This was not the first incident of its kind. Earlier this year, the developer of two other popular packages sabotaged them by modifying them to produce gibberish text instead of their expected output.
These incidents show how software developers rely on an increasingly large ecosystem of third-party packages. While these packages can greatly simplify and speed up development, they also have wide security implications.
A 2018 study of npm – a package manager that is the biggest and most used repository of third-party packages for JavaScript developers – found that, in 2018, the average package would automatically install an additional three packages in order for that software to function. These additional packages, in turn, would install even more packages. On average, the final total for installing just one package was some 80 packages from 40 developers. That number has likely grown since then.
As the study’s researchers note, this creates huge security concerns, as malicious code in one package could affect thousands of others. Just 20 developers (out of more than 150,000) are needed to compromise half of the ecosystem.
While the npm ecosystem is notorious for its complexity and inter-connectedness, other programming languages are facing similar issues.
To mitigate these security issues, the researchers suggest introducing vetting processes for developers who are in charge of maintaining and updating packages, validating their identity and helping them understand security principles. Whatever the outcome, these kinds of attacks are likely to increase as software becomes more interdependent.