【问题标题】:How to resolve "Deserialization of Untrusted Data" error reported by Checkmarx scan issue如何解决 Checkmarx 扫描问题报告的“不可信数据的反序列化”错误
【发布时间】:2022-02-16 11:36:48
【问题描述】:

我已将 Checkmarx 扫描工具与 Azure DevOps 管道集成。运行 ASP.Net Core Web API 相关管道后,我得到了高风险结果。我尝试了多种方法并运行管道。现在仍然没有运气。你能帮我解决这个问题吗?

C# 代码:

Uri requestUri = new Uri("https://webapi.com/token");
HttpContent httpContent = new StringContent(System.Text.Json.JsonSerializer.Serialize(new { access_token = accessToken }), Encoding.UTF8, "application/json");
var result = await client.PostAsync(requestUri, httpContent);
if (result != null && result.IsSuccessStatusCode)
{
  var content = await result.Content.ReadAsStreamAsync();
  var authResponse = await System.Text.Json.JsonSerializer.DeserializeAsync<TokenResponse>(content);
  var authToken = authResponse.AuthenticationToken;
}

TokenResponse.cs:

class TokenResponse
{
  public string AuthenticationToken { get; set; }
}

错误信息:

文件中异步处理的序列化对象 PostAsync 行 42 被 DeserializeAsync 在第 46 行的文件中反序列化。

【问题讨论】:

  • 从你的示例代码中我们只能看到你自己写的api接口是使用HttpClient请求的,无法帮助我们定位问题。
  • 请提供一个可重现的最小示例或错误消息供我们调查。

标签: c# asp.net-core security asp.net-core-webapi checkmarx


【解决方案1】:

Checkmarx 不将 JsonSerializer 识别为安全的反序列化器。您将不得不覆盖 Checkmarx 查询以使用 Checkmarx CxAudit 将 JsonSerializer 作为消毒剂之一,或者如果您没有 CxAudit,您将不得不与您的 AppSec 团队争论这应该根据 System.Text 标记为不可利用。 Json 威胁模型:

缓解

JsonSerializer 默认不支持System.Type 实例的序列化和反序列化。可以实现自定义转换器来处理 System.Type 实例,但应注意避免处理不受信任的数据。

https://github.com/dotnet/runtime/blob/main/src/libraries/System.Text.Json/docs/ThreatModel.md

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 2019-02-12
    相关资源
    最近更新 更多