Poisoned Pipeline

Poisoned Pipeline / Incidents / AS1

AS1 · 2018-04

Webmin 1.890–1.920 build-server backdoor

Linux distro / packagesDeveloper workstation

In April 2018 an attacker exploited the Webmin development build server and
injected a concealed remote-command backdoor into password_change.cgi. The
change was taken from the local build tree, not from a controlled SCM, so
source review of git would not have seen it. Versions 1.890 shipped an
immediately exploitable root RCE; 1.900–1.920 still contained similar code
that became exploitable if “allow changing of expired passwords” was on.
In September 2018 the old build server was replaced, but the modified
directory was copied from backups and the backdoor returned. This was
deliberate, not an accidental bug. Tracked as CVE-2019-15107 / CVE-2019-15231.

Mapped techniques

supply-chain Webmin build pipeline

T0180 · Initial Access · Compromise services / servers

The development build server was exploited in April 2018.

T0135 · Initial Access · Vulnerable CICD system

Infected code was taken from the local build tree, not from SCM.

T0194 · Initial Access · Outdated software components

The replacement CentOS 7 build host reused a backup of the poisoned
build directory, so the backdoor survived the “rebuild.”

T0138 · Persistence · Backdoor in code

Non-obvious RCE planted in password_change.cgi.

T0191 · Impact · Malicious code in artifacts

Released Webmin tarballs carried the backdoor to operators.

post-supply-chain Webmin customers

T0172 · Execution · Runtime backdoor

Root RCE for anyone who knew the trigger, on default 1.890.

T0201 · Impact · Customers compromised

Any server that installed the backdoored Webmin package.

Sources