Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Microsoft Security Advisory CVE-2021-26701 | .NET Core Remote Code Execution Vulnerability #49377

Closed
rbhanda opened this issue Mar 9, 2021 · 57 comments

Comments

@rbhanda
Copy link
Contributor

rbhanda commented Mar 9, 2021

Microsoft Security Advisory CVE-2021-26701 | .NET Core Remote Code Execution Vulnerability

Executive summary

Microsoft is releasing this security advisory to provide information about a vulnerability in .NET 5.0, .NET Core 3.1, and .NET Core 2.1. This advisory also provides guidance on what developers can do to update their applications to remove this vulnerability.

A remote code execution vulnerability exists in .NET 5 and .NET Core due to how text encoding is performed.

Announcement

Announcement for this issue can be found at dotnet/announcements#178

Mitigation factors

Microsoft has not identified any mitigating factors for this vulnerability.

Affected software

The vulnerable package is System.Text.Encodings.Web . Upgrading your package and redeploying your app should be sufficient to address this vulnerability.

Vulnerable package versions:

Any .NET 5, .NET Core, or .NET Framework based application that uses the System.Text.Encodings.Web package with a vulnerable version listed below.

Package Name Vulnerable Versions Secure Versions
System.Text.Encodings.Web 4.0.0 - 4.5.0
4.6.0-4.7.1
5.0.0
4.5.1
4.7.2
5.0.1

Please validate that each of the .NET versions you are using is in support. Security updates are only provided for supported .NET versions.

How do I know if I am affected?

If you have a runtime or SDK with a version listed in affected software, you're exposed to the vulnerability.

How do I fix the issue?

To fix the issue, please install the latest version of .NET 5.0, .NET Core 3.1 or .NET Core 2.1. If you have installed one or more .NET Core SDKs through Visual Studio, Visual Studio will prompt you to update Visual Studio, which will also update your .NET Core SDKs.

You can list the versions you have installed by running the dotnet --info command. You should see an output like the following:

.NET Core SDK (reflecting any global.json):
 Version:   3.1.100
 Commit:    cd82f021f4

Runtime Environment:
 OS Name:     Windows
 OS Version:  10.0.18363
 OS Platform: Windows
 RID:         win10-x64
 Base Path:   C:\Program Files\dotnet\sdk\3.1.100\

Host (useful for support):
  Version: 3.1.0
  Commit:  65f04fb6db

.NET Core SDKs installed:
  3.1.100 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:
  Microsoft.AspNetCore.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 3.1.0 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

To install additional .NET Core runtimes or SDKs:
  https://aka.ms/dotnet-download

.NET 5.0, .NET Core 3.1 and .NET Core 2.1 updates are also available from Microsoft Update. To access this either type "Check for updates" in your Windows search, or open Settings, choose Update & Security and then click Check for Updates.

Once you have installed the updated runtime or SDK, restart your apps for the update to take effect.

Additionally, if you've deployed self-contained applications targeting any of the impacted versions, these applications are also vulnerable and must be recompiled and redeployed.

Other Information

Reporting Security Issues

If you have found a potential security issue in .NET Core or .NET 5, please email details to [email protected]. Reports may qualify for the Microsoft .NET Core & .NET 5 Bounty. Details of the Microsoft .NET Bounty Program including terms and conditions are at https://aka.ms/corebounty.

Support

You can ask questions about this issue on GitHub in the .NET GitHub organization. The main repos are located at https:/dotnet/runtime and https:/dotnet/aspnet/. The Announcements repo (https:/dotnet/Announcements) will contain this bulletin as an issue and will include a link to a discussion issue. You can ask questions in the linked discussion issue.

Disclaimer

The information provided in this advisory is provided "as is" without warranty of any kind. Microsoft disclaims all warranties, either express or implied, including the warranties of merchantability and fitness for a particular purpose. In no event shall Microsoft Corporation or its suppliers be liable for any damages whatsoever including direct, indirect, incidental, consequential, loss of business profits or special damages, even if Microsoft Corporation or its suppliers have been advised of the possibility of such damages. Some states do not allow the exclusion or limitation of liability for consequential or incidental damages so the foregoing limitation may not apply.

External Links

CVE-2021-26701

Revisions

V1.0 (March 09, 2021): Advisory published.

Version 1.0

Last Updated 2021-03-09

@omajid
Copy link
Member

omajid commented Mar 9, 2021

https://msrc.microsoft.com/update-guide/en-US/vulnerability/CVE-2021-26701#securityUpdates seems a little strange...

  • It says the updates for .NET Core 2.1, 3.1 and .NET 5 were released in February
  • The link to release notes is broken

@kevbry
Copy link

kevbry commented Mar 10, 2021

Assuming this affects anyone running asp.net core 2.1 apps on full framework? Will updated dependent packages be released referencing the fixed version?

webcoyote added a commit to PlayOneMoreGame/omgpkgs that referenced this issue Mar 10, 2021
=merge=
dotnet/runtime#49377
-> remote code execution!
webcoyote added a commit to PlayOneMoreGame/omgpkgs that referenced this issue Mar 10, 2021
=merge=
dotnet/runtime#49377
-> remote code execution!
@johnkors
Copy link

johnkors commented Mar 10, 2021

$ dotnet --list-runtimes
Microsoft.AspNetCore.App 3.1.3 [/usr/local/share/dotnet/shared/Microsoft.AspNetCore.App]
Microsoft.NETCore.App 3.1.3 [/usr/local/share/dotnet/shared/Microsoft.NETCore.App]
<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="System.Text.Encodings.Web" Version="4.6.0" />
  </ItemGroup>
</Project>
$ dotnet list package --vulnerable

The following sources were used:
   https://api.nuget.org/v3/index.json

The given project `VulnerableApp` has no vulnerable packages given the current sources

Shouldn't the new .NET 5 SDK feature dotnet list package --vulnerable report these..? Delay?

Or is this the scenario where the runtime hijacks and uses a runtime version of said package instead of what is defined in csproj, and hence not reporting it?

cc @JonDouglas @drewgillies

@drewgillies
Copy link

drewgillies commented Mar 10, 2021

Hi @johnkors --the issue here is that there are no package vulnerabilities registered on GitHub for this CVE: https:/advisories?query=CVE-2021-26701
Until a GitHub vulnerability advisory exists, the NuGet tools (including those included in the dotnet CLI) will have no information to present. But when we have an advisory in place it will surface in the tools.

[I've edited this comment down to something simpler because some of the finer points are still under discussion, but essentially this is why you don't see the advisory in the CLI--because it's not presented in GitHub]

@johnkors
Copy link

johnkors commented Mar 10, 2021

So basically there is a delay going between these stages:

  1. Reported as CVE https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-26701
  2. GitHub issue announcement, with affected & fix (like the one here)
  3. It appears as a GitHub advisory, shows in CLI

Thanks, @drewgillies !

@drewgillies
Copy link

You're welcome! Hopefully we'll have something in place soon.

@miguelcrpinto
Copy link

This announcement is a bit confusing... In the executive summary it mentions only ".NET 5.0, .NET Core 3.1, and .NET Core 2.1", then in the "Affected software" you mention "Any .NET 5, .NET Core, or .NET Framework based application".

Why was ".NET Framework" added in the "Affected software" section? Does this mean that .NET Framework applications are also vulnerable or only .Net Core Applications that target the .NET Framework?

@benbhall
Copy link
Contributor

benbhall commented Mar 10, 2021

A couple of things might need some clarifying.

  1. Affected software: System.Text.Encodings.Web is tied to .NET Core, included out of the box in the runtime with Microsoft.NETCore.App so, the advisory is justified in being released under the headline of for .NET 5 and Core banner. However, it is also being used in .NET Framework applications via the NuGet package. Framework is mentioned once under Affected software but is there a risk of it being missed by not appearing in the headline?

  2. Removing vulnerability from applications:

Upgrading your package and redeploying your app should be sufficient to address this vulnerability.

and later on:

To fix the issue, please install the latest version of .NET 5.0, .NET Core 3.1 or .NET Core 2.1.
...
Once you have installed the updated runtime or SDK, restart your apps for the update to take effect.

We could clarify that Framework is fixed via NuGet package update and deploy.

Then Core is just the runtime update and restart? I'm sure there are probably scenarios where Core applications are pulling the NuGet in directly too.

EDIT Apologies for some repetition. Wrote this then went into a meeting without adding comment and missed @miguelcrpinto comment.

@snickler
Copy link
Contributor

A couple of things might need some clarifying.

  1. Affected software: System.Text.Encodings.Web is tied to .NET Core, included out of the box in the runtime with Microsoft.NETCore.App so, the advisory is justified in being released under the headline of for .NET 5 and Core banner. However, it is also being used in .NET Framework applications via the NuGet package. Framework is mentioned once under Affected software but is there a risk of it being missed by not appearing in the headline?
  2. Removing vulnerability from applications:

Upgrading your package and redeploying your app should be sufficient to address this vulnerability.

and later on:

To fix the issue, please install the latest version of .NET 5.0, .NET Core 3.1 or .NET Core 2.1.
...
Once you have installed the updated runtime or SDK, restart your apps for the update to take effect.

We could clarify that Framework is fixed via NuGet package update and deploy.

Then Core is just the runtime update and restart? I'm sure there are probably scenarios where Core applications are pulling the NuGet in directly too.

EDIT Apologies for some repetition. Wrote this then went into a meeting without adding comment and missed @miguelcrpinto comment.

Yes, this is the understanding that @blowdart and @GrabYourPitchforks have provided on Twitter.

.NET Fx = upgrade NuGet Package
.NET Core/5+ = upgrade runtime.

https://twitter.com/LeviBroderick/status/1369478430002081793

@benbhall
Copy link
Contributor

Ahh good, now the understanding is here too. Just need the advisory itself updated :)

@kevbry
Copy link

kevbry commented Mar 10, 2021

We could clarify that Framework is fixed via NuGet package update and deploy.

Doesn't that only work if you already had a direct reference to this specific package, not if it was brought in as a transitive dependency of something like microsoft.aspnetcore?

Edit: it does. Would be extremely helpful if this and future CVE could include the same sort of remediation steps that dotnet/aspnetcore#18336 does for those exposed to this because of a transitive dependency.

This seems to be exactly the situation NuGet/Home#5887 was talking about

@GrabYourPitchforks
Copy link
Member

Hi all - thanks for the feedback. This has jumpstarted some discussions internally between the .NET security team, the release management team, and representatives from NuGet. In particular, we're discussing: (a) if we should wordsmith the advisory text to clarify the distinction between applications targeting .NET Core and non-Core applications which have manually pulled in this package; and (b) if we can get plugged in to the GitHub and NuGet scans for vulnerable package versions.

There's nothing to announce right now because these are early conversations, and I don't want to make any promises. But if something does come from these discussions, it'll be a direct result of the feedback you all have provided.

@Plasma
Copy link

Plasma commented Mar 10, 2021

@GrabYourPitchforks thank you, could I also suggest a CLI update that (like npm audit) checks if you are still vulnerable; as while the advice is to update the runtime, I’m unclear if packages that I may have which have a dependency also need to be updated (which may not be possible if they have no updates yet).

A CLI check to say “everything is good” would be great.

@JonDouglas
Copy link

@Plasma We're(NuGet) working on it and will have more to share soon. Thanks for your patience.

@deanward81
Copy link

It looks like the issue is fixed in SDK 3.1.407 but the release notes on the announcements repo reference SDK 3.1.406. We just installed the wrong SDK until we realised - can we get this fixed up?

@rbhanda
Copy link
Contributor Author

rbhanda commented Mar 12, 2021

Hello @deanward81 I have fixed the issue now.

If you're using .NET Core 3.1, you should download and install Runtime 3.1.13 or SDK 3.1.113 (for Visual Studio 2019 v16.4) or 3.1.407 (for Visual Studio 2019 v16.5 or later) from https://dotnet.microsoft.com/download/dotnet-core/3.1.

@dnbr2002
Copy link

dnbr2002 commented Mar 22, 2021

This security violation for System.Text.Encodings.Web affects package Microsoft.AspNetCore.Diagnostics with not remediation options at this time that I'm aware of. Users leveraging your Health Checks have no options for their applications at this time it seems. System.Text.Encoding.Web 4.5.0 is a transitive depends for Microsoft.AspNetCore.Diagnostics 2.2.0 (the latest version). Is there any way around this CVE at this time or is there a fix coming? Please advise. Thank you.

@GrabYourPitchforks
Copy link
Member

@dnbr2002 It should be possible to update the System.Text.Encodings.Web package manually within your application. Or, if your application is running on ASP.NET Core 2.1, download the updated SDK https://dotnet.microsoft.com/download/dotnet/2.1 and you should receive the fix automatically without needing to change your package references.

Please note: The 2.2.x runtime and 2.2.x wave of packages are out of support and are not receiving updates. The current supported runtime versions and package waves are 2.1.x, 3.1.x, and 5.0.x. See the red header at the top of https://dotnet.microsoft.com/download/dotnet/2.2 for more information on 2.2's end-of-life.

@dnbr2002
Copy link

@GrabYourPitchforks we have downloaded the latest sdk for 3.1.407 and run builds in our pipeline with it but it does not update the reference I have for Microsoft.AspNetCore.Diagnostics explicitly in my csproj. That one remains with the transitive depends of System.Text.Encodings.Web at 4.5.0 even with the 3.1.407 sdk.

@johnkors
Copy link

@dnbr2002 Did you try adding an explicit reference to System.Text.Encodings.Web/5.0.1?

     <PackageReference Include="Microsoft.AspNetCore.Diagnostics" Version="2.2.0" />
+    <PackageReference Include="System.Text.Encodings.Web" Version="5.0.1" />

@dnbr2002
Copy link

dnbr2002 commented Mar 23, 2021

@johnkors I did based on the recommends in this thread but it doesn't update the transitive depends in Microsoft.AspNetCore.Diagnostics which didn't surprise me . I'm not sure why my explicit reference to System.Text.Encodings.Web would update a transitive depends in another package but maybe i don't understand how transitives work in .NET?

@ghost
Copy link

ghost commented Aug 11, 2022

Hello!
Any news on fixing this vuln? Still in newest runtime Docker Image we have old version with RCE.

@danmoseley
Copy link
Member

Which docker image?

@ghost
Copy link

ghost commented Aug 11, 2022

@danmoseley
Copy link
Member

danmoseley commented Aug 11, 2022

Which tag though? eg can you paste your docker command?

@ghost
Copy link

ghost commented Aug 11, 2022

I run scan with Trivy, after building nuget packages via SDK. I use 6.0-focal tag.

@danmoseley
Copy link
Member

@jeffhandley could someone on your team pull this image and see why a scanner is indicating it has a vulnerable System.Text.Encodings.Web?

@iSeiryu
Copy link

iSeiryu commented Jan 13, 2023

It's even an issue in .NET 7.
An older version of System.Text.Encodings.Web is used by https://www.nuget.org/packages/Microsoft.AspNetCore.Http.Abstractions/ which has not been updated since 2018 and still targets .NET Standard 2.0. It can be fixed by updating the transitive dependency.

@snickler
Copy link
Contributor

It's even an issue in .NET 7. An older version of System.Text.Encodings.Web is used by https://www.nuget.org/packages/Microsoft.AspNetCore.Http.Abstractions/ which has not been updated since 2018 and still targets .NET Standard 2.0. It can be fixed by updating the transitive dependency.

Hmm, you shouldn't need to reference the Microsoft.AspNetCore.Http.Abstractions NuGet package in .NET 7, unless the project that needs it is targeting netstandard2.x?. If you need that namespace in a project that isn't an ASPNET-based one, add a FrameworkReference to it.

https://learn.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.1&tabs=visual-studio#framework-reference

@iSeiryu
Copy link

iSeiryu commented Jan 14, 2023

@snickler We have a fairly empty solution with a few projects. Each project targets net7.0. Snyk flags the repository with this vulnerability https://security.snyk.io/vuln/SNYK-DOTNET-SYSTEMTEXTENCODINGSWEB-1253267

@snickler
Copy link
Contributor

@snickler We have a fairly empty solution with a few projects. Each project targets net7.0. Snyk flags the repository with this vulnerability https://security.snyk.io/vuln/SNYK-DOTNET-SYSTEMTEXTENCODINGSWEB-1253267

Which direct NuGet Packages are being referenced, if you don't mind me asking? I'm wondering if something you're referencing is referencing AspNetCore.Http.Abstractions transitively when it shouldn't

@OptimusPi
Copy link

@snickler We have a fairly empty solution with a few projects. Each project targets net7.0. Snyk flags the repository with this vulnerability https://security.snyk.io/vuln/SNYK-DOTNET-SYSTEMTEXTENCODINGSWEB-1253267

Which direct NuGet Packages are being referenced, if you don't mind me asking? I'm wondering if something you're referencing is referencing AspNetCore.Http.Abstractions transitively when it shouldn't

I have the same issue, and if I search for System.Text.Encodings.Web there are two references <4.5.1

"Microsoft.AspNetCore.Http.Abstractions/2.1.1": {
        "type": "package",
        "dependencies": {
          "Microsoft.AspNetCore.Http.Features": "2.1.1",
          "System.Text.Encodings.Web": "4.5.0"
        },
        "compile": {
          "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": {}
        },
        "runtime": {
          "lib/netstandard2.0/Microsoft.AspNetCore.Http.Abstractions.dll": {}
        }
      },

and

"Microsoft.AspNetCore.WebUtilities/2.1.1": {
        "type": "package",
        "dependencies": {
          "Microsoft.Net.Http.Headers": "2.1.1",
          "System.Text.Encodings.Web": "4.5.0"
        },
        "compile": {
          "lib/netstandard2.0/Microsoft.AspNetCore.WebUtilities.dll": {}
        },
        "runtime": {
          "lib/netstandard2.0/Microsoft.AspNetCore.WebUtilities.dll": {}
        }
      },

Where is "Microsoft.AspNetCore.Http": "2.1.22" referenced?

Microsoft.ApplicationInsights.AspNetCore/2.21.0
Microsoft.AspNetCore.Hosting/2.1.1
Microsoft.AspNetCore.Mvc.Core/1.0.4
Microsoft.AspNetCore.Mvc.Core/2.1.0
Microsoft.Azure.WebJobs.Extensions.Http/3.0.2
etc.

Seems to come from the package ApplicationInsights AspNetCore:

"Microsoft.ApplicationInsights.AspNetCore/2.21.0": {
        "dependencies": {
          "Microsoft.ApplicationInsights": "2.21.0",
          "Microsoft.ApplicationInsights.DependencyCollector": "2.21.0",
          "Microsoft.ApplicationInsights.EventCounterCollector": "2.21.0",
          "Microsoft.ApplicationInsights.PerfCounterCollector": "2.21.0",
          "Microsoft.ApplicationInsights.WindowsServer": "2.21.0",
          "Microsoft.ApplicationInsights.WindowsServer.TelemetryChannel": "2.21.0",
          "Microsoft.AspNetCore.Hosting": "2.1.1",
          "Microsoft.AspNetCore.Http": "2.1.22",
          "Microsoft.Extensions.Configuration.Json": "3.1.6",
          "Microsoft.Extensions.Logging.ApplicationInsights": "2.21.0",
          "System.Text.Encodings.Web": "4.7.2"
        },

What should I do?

@iSeiryu
Copy link

iSeiryu commented Feb 14, 2023

@snickler Sorry for taking that long to reply, I don't have a direct access to the source code that has this issue.
They use this approach to global error handling: https://code-maze.com/global-error-handling-aspnetcore/
It has this line

private readonly RequestDelegate _next;

RequestDelegate comes from Microsoft.AspNetCore.Http.Abstractions.

@DibyaRanjan1
Copy link

Hi
We are getting a critical warning in our project after integrating it with the SYNK tool. Can anyone from MS upgrade the dependency of as well.
Internally It has a dependency with [email protected] . I think , you may need to migrate System.Text.Encodings.Web to @4.7.2, @5.0.1 . Attached the screen shot from Synk.

Capture

@KalleOlaviNiemitalo
Copy link

@DibyaRanjan1, the vulnerable System.Text.Encodings.Web dependency seems to have been fixed in Microsoft.IdentityModel.Protocols.OpenIdConnect 6.26.0. See AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet#1985, AzureAD/azure-activedirectory-identitymodel-extensions-for-dotnet#1997.

@DibyaRanjan1
Copy link

@KalleOlaviNiemitalo, Thank you. I have updated the dependency to 6.26.0.

@missraphie
Copy link

missraphie commented Jul 18, 2023

Hi,
we are getting a critical warning in our project after integrating it with SNYK. Can anyone from MS update the dependency.

Dependency tree: [email protected][email protected][email protected][email protected][email protected]

You can find in the attached SNYK screenshot the relevant information.

image

Thank you

@ericstj ericstj closed this as completed Aug 10, 2023
@ghost ghost locked as resolved and limited conversation to collaborators Sep 10, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
No open projects
Development

No branches or pull requests