Open Source 2018-04-01 · 503 days ·Backdoor, Remote Code Execution

Webmin build infrastructure inserted backdoor

Webmin's build infrastructure was compromised in 2018, and attackers modified password_change.cgi before official releases were produced.

Story

Webmin's 2019 backdoor was not born in the public Git tree. The project later explained that its development build server had been compromised in April 2018 and that password_change.cgi was modified there. The timestamp was set back, so the poisoned local build file did not appear as a suspicious Git diff.

The first affected release, Webmin 1.890, shipped with a root command execution backdoor that was exploitable in a default install. The vulnerable file was later reverted from GitHub, but in July 2018 the attacker modified it again. This second version reached Webmin 1.900 through 1.920, where exploitation required the expired-password-change feature to be enabled.

The malicious line was short. In the password-change path, attacker-controlled input reached Perl command execution through a qx/.../ expression. Because Webmin commonly runs as root, a remote command reached the operating system with root privileges.

The compromise survived a build-server replacement in September 2018 because the old build directory was restored from backup onto the new host. A public exploit release in August 2019 disclosed the issue. Webmin removed the code, released 1.930, rotated secrets from the old build system, and changed the build process to use checked-in GitHub code instead of a synced local directory.

Affected Artifacts

webmin

· webmin.com · Source Archive
Observed
2018-07-19 to 2019-08-17
Compromised Versions
Fixed
1.930
Hashes
  • sha256:049286261fbcd846142014f4a7782ab3243b1a7ae816a57468f5d2f8c2199b0c
  • md5:7e1d72249a9eec92f9c9dc69dcfbffb3
  • Webmin's security page lists CVE-2019-15231 for the default-exploitable 1.890 case, while many exploit and advisory records track the broader 1.890 through 1.920 command-execution issue as CVE-2019-15107.
  • The attack date starts with the April 2018 build-server compromise. The artifact date starts with the Webmin 1.890 release.

Incident Context

Motive
Unauthorized Access Control
Attribution
Person
Cause
Compromised Infrastructure
Transitive
No
Actor
Individual Hacker

External References

Source record: oss/attacks/webmin/2019/meta.yaml