(SAST检测规则-10)侧信道数据泄露/意外数据泄露

缺陷解释

侧信道数据泄露发生在应用程序错误处理敏感信息时,可能将这些数据存储在设备中的不安全位置。例如:

  • 日志文件
  • 缓存区域
  • 剪贴板
  • URL 或 Cookie 缓存

这些位置可能被运行在同一设备上的恶意应用程序轻松访问,进而导致敏感信息的泄露。

漏洞风险

  1. 攻击者可以通过少量代码轻松定位并访问存储敏感数据的位置。
  2. 即便用户未显式存储数据,某些系统行为或不安全的开发实践可能会意外泄露敏感信息。

常见泄露类型

  • Leaking Content Providers:未正确保护的内容提供者接口,可能导致未经授权的访问。
  • Copy/Paste Buffer Caching:敏感数据放置在剪贴板,可能被其他应用读取。
  • Logging:调试日志中包含敏感信息,例如密码或身份验证令牌。
  • URL Caching:应用程序未正确管理 URL 缓存,可能泄露会话信息。
  • Browser Cookie Objects:未保护的浏览器 Cookie 可能被恶意程序劫持。
  • Analytics Data Sent to Third Parties:通过不可信的第三方 API 发送数据,可能导致隐私信息泄露。

漏洞详解与示例

1. 泄露内容提供者 (Leaking Content Providers)

问题代码

public class MyContentProvider extends ContentProvider {

    @Override

    public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

        // 未验证权限直接返回敏感数据

        return database.query(uri, projection, selection, selectionArgs, sortOrder);

    }

}

漏洞分析

  • 未验证访问权限,任何应用都可以通过 URI 访问敏感数据。

修复后的代码

@Override

public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {

    if (checkPermission()) {

        return database.query(uri, projection, selection, selectionArgs, sortOrder);

    } else {

        throw new SecurityException("Unauthorized access!");

    }

}

2. 拷贝/粘贴缓冲区 (Copy/Paste Buffer Caching)

问题场景

ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE);

clipboard.setText("Sensitive Info"); // 将敏感信息直接放置于剪贴板

漏洞分析

  • 剪贴板数据全局可见,任何应用均可读取。

修复措施

  • 避免将敏感信息放置于剪贴板。
  • 如果必须使用剪贴板,确保数据加密。

3. 日志泄露 (Logging)

问题代码

Log.d("UserPassword", "Password: " + password); // 日志中直接记录敏感信息

漏洞分析

  • 调试日志可能包含用户名、密码或身份验证信息,攻击者可以通过 adb logcat 或其他工具读取日志。

修复后的代码

if (BuildConfig.DEBUG) {

    Log.d("UserDebugInfo", "Password is entered"); // 在调试模式中记录无敏感数据的提示

}

4. URL缓存和浏览器Cookie对象 (URL Caching & Cookies)

问题代码

WebView webView = new WebView(context);

webView.loadUrl("http://example.com?session=12345"); // URL 中泄露敏感会话信息

漏洞分析

  • 未加密的会话 ID 或敏感信息在 URL 中传递,容易被中间人攻击或缓存泄露。

修复后的代码

webView.loadUrl("https://example.com"); // 强制 HTTPS 连接避免信息泄露

5. 分析数据发送给第三方 (Analytics Data)

问题场景

AnalyticsService.sendData("UserID", userId); // 将用户 ID 发送至第三方 API

漏洞分析

  • 第三方 API 或恶意插件可能拦截敏感信息,例如设备标识或地理位置。

修复措施

  • 检查第三方库的可信度和安全性。
  • 确保敏感信息加密传输,并限制不必要的数据分享。

缓解措施

  1. 保护内容提供者
    • 确保 URI 访问受权限限制。
    • 在敏感查询操作中添加访问控制逻辑。
  2. 避免敏感信息的日志记录
    • 调试日志中仅记录无关紧要的信息。
    • 使用动态标志(如 BuildConfig.DEBUG)控制日志输出。
  3. 限制剪贴板的敏感信息存储
    • 避免在剪贴板中直接存储敏感信息。
    • 如果必须使用,确保剪贴板数据加密并快速清除。
  4. 安全管理 WebView 和 URL 缓存
    • 使用 HTTPS 协议确保安全传输。
    • 禁用 WebView 的缓存功能以保护敏感数据。
  5. 选择可信第三方 API
    • 检查第三方库的隐私政策和安全性。
    • 加密敏感数据后再传递给第三方服务。

参考文献

通过识别和修复侧信道数据泄露漏洞,可以有效保护敏感数据安全,防止攻击者利用这些意外暴露的资源进行攻击。

-------------------------------------------------------------------------------------------------------------------------------

工作:SAST工具推介、评测、代码审计、培训资料、应用安全咨询、SAST检测规则、安全漏洞数据处理、许可证数据处理、组件数据处理等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

manok

你的打赏很重要

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值