Malware authors are so doggone creative. They find flaws in software that should be boring and stolid enough to avoid being exploited -- and then exploit them, anyway.
ZipSlip is an exploit like that.
It was first found by Snyk and disclosed on its website. The malware affects major archival formats such as ar, jar, war, cpio, apk, rar and 7z. Researchers report that it can be exploited on both client (user) machines and servers.
It's a way for an attacker to feed a poisoned archival file to a user, which allows them to write arbitrary files on the system that may end up with remote command execution.
Who would think unpacking a file could do that? Well, it can.
The vulnerability is exploited using a specially crafted archive that holds directory traversal filenames such as "../../evil.sh." With it, an attacker can unzip files outside the normal unzip path and then overwrite sensitive files such as critical OS libraries.
These libraries can be ZipSlip vulnerable, and Snyk published a list of affected open source libraries on GitHub. (See Microsoft's GitHub Deal: Following Developers & Security Into the Cloud.)
Snyk found that Java was the most affected programming language. The Oracle and Apache commons-compress APIs do offer some archiving support but do not publicly provide full extract capability. Java has no central library that offers high level processing of archive files. Snyk details that the lack of such a library led to vulnerable code snippets being hand-crafted and shared among developer communities like StackOverflow.
The effect on these libraries -- though many of them were fixed before Snyk disclosed -- can have a significant impact on many existing projects. Snyk found that Oracle, Amazon, Spring/Pivotal, Linkedin, Twitter, Alibaba, Jenkinsci, Eclipse, OWASP, SonarCube, OpenTable, Arduino, ElasticSearch, Selenium, Gradle and JetBrains all used the libraries or had vulnerable code within them that could be exploited.
The problem seems to not affect Ruby or Python. Snyk researchers noted:
We also vetted the Ruby and Python ecosystems and couldn't find any vulnerable code snippets or libraries. In fact, Python's zipfile was vulnerable until it was fixed in 2014. Ruby has a number of existing vulnerabilities that have been fixed in previous versions.
The way out of this may be to add validation code to a vulnerable snippet to test for directory traversal. If found, one must make sure to use the fixed libraries that Snyk has listed on GitHub. That process of finding out dependencies is a major pain, though.
The subtlety of the exploit and the lack of wide awareness of it make it a major security challenge for the enterprise. Though mediation will require some effort, the depth of the problem will make it rewarding.
— Larry Loeb has written for many of the last century's major "dead tree" computer magazines, having been, among other things, a consulting editor for BYTE magazine and senior editor for the launch of WebWeek.