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-2023-21538 | .NET Denial of Service Vulnerability #80449

Closed
rbhanda opened this issue Jan 10, 2023 · 15 comments
Closed

Comments

@rbhanda
Copy link
Contributor

rbhanda commented Jan 10, 2023

Microsoft Security Advisory CVE-2023-21538: .NET Denial of Service Vulnerability

Executive summary

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

A denial of service vulnerability exists in .NET 6.0 where a malicious client could cause a stack overflow which may result in a denial of service attack when an attacker sends an invalid request to an exposed endpoint.

Announcement

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

Mitigation factors

Microsoft has not identified any mitigating factors for this vulnerability.

Affected software

  • Any .NET 6.0 application running on .NET 6.0.12 or earlier.

If your application uses the following package versions, ensure you update to the latest version of .NET.

.NET 6

Package name Affected version Patched version
Microsoft.NetCore.App.Runtime.linux-arm >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.linux-arm64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.linux-musl-arm >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.linux-musl-arm64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.linux-musl-x64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.linux-x64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.osx-arm64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.osx-x64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.win-arm >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.win-arm64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.win-x64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.win-x86 >= 6.0.0, < 6.0.12 6.0.13

Advisory FAQ

How do I know if I am affected?

If you have a runtime or SDK with a version listed, or an affected package 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 6.0. If you have installed one or more .NET SDKs through Visual Studio, Visual Studio will prompt you to update Visual Studio, which will also update your .NET SDKs.
  • If you have .NET Core 3.1 or greater installed, you can list the versions you have installed by running the dotnet --info command. You will see output like the following;
  • If you are using one of the affected packages, please update to the patched version listed above.
.NET Core SDK (reflecting any global.json):

 Version:   6.0.300
 Commit:    8473146e7d

Runtime Environment:

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

Host (useful for support):

  Version: 6.0.5
  Commit:  8473146e7d

.NET Core SDKs installed:

  6.0.300 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:

  Microsoft.AspNetCore.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

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

.NET 6.0 and and .NET 7.0 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 6.0 or .NET 7.0, please email details to secure@microsoft.com. 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://github.com/dotnet/runtime and https://github.com/dotnet/aspnet/. The Announcements repo (https://github.com/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.

Acknowledgements

Johan Gorter with AFAS Software

External Links

CVE-2023-21538

Revisions

V1.0 (January 10, 2023): Advisory published.

Version 1.0

Last Updated 2023-01-10

@dotnet-issue-labeler
Copy link

I couldn't figure out the best area label to add to this issue. If you have write-permissions please help me learn by adding exactly one area label.

@teo-tsirpanis

This comment was marked as resolved.

@ericmutta
Copy link
Contributor

Hello @rbhanda, I have always felt rather helpless when receiving these announcements because they essentially say "there's a problem, upgrade to fix" but there's little detail about the actual vulnerability itself. Specifically, since .NET is open source, how would one find the code that was vulnerable and see how it was fixed (perhaps via a link to the relevant commits)?

@teo-tsirpanis
Copy link
Contributor

@ericmutta you can see the history of the release/6.0 branch; one of the latest commits must have the fix. At the time of writing it it's not up yet, it usually takes some time.

@gabrielweyerjb
Copy link

when an attacker sends an invalid request to an exposed endpoint

Feels like this only impacts ASP.NET Core. Would a background service be impacted if it doesn't host any HTTP endpoint?

@iqb-dawn
Copy link

iqb-dawn commented Jan 11, 2023

What about .NET Core version 3.1 and .NET Core version 5 and we cannot upgrade to .NET 6 immediately. Is there patched versions for .NET 3.x.x and .NET 5.x.x?

@lg2de
Copy link

lg2de commented Jan 11, 2023

What about .NET Core version 3.1 and .NET Core version 5 and we cannot upgrade to .NET 6 immediately. Is there patched versions for .NET 3.x.x and .NET 5.x.x?

.netcore 3.x and .net 5.x are out of support.

@iqb-dawn
Copy link

iqb-dawn commented Jan 11, 2023

@lg2de As far as I understand they (5.x.x and 3.x.x) are also vulnerable, right?
They mentioned >= 6.0.0, < 6.0.12, so 3 and 5 are might be not vulnerable?

@lg2de
Copy link

lg2de commented Jan 11, 2023

@lg2de As far as I understand they (5.x.x and 3.x.x) are also vulnerable, right? They mentioned >= 6.0.0, < 6.0.12, so 3 and 5 are might be not vulnerable?

I expect the old version are vulnerable too.

@ghost
Copy link

ghost commented Jan 11, 2023

Tagging subscribers to this area: @dotnet/area-meta
See info in area-owners.md if you want to be subscribed.

Issue Details

Microsoft Security Advisory CVE-2023-21538: .NET Denial of Service Vulnerability

Executive summary

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

A denial of service vulnerability exists in .NET 6.0 where a malicious client could cause a stack overflow which may result in a denial of service attack when an attacker sends an invalid request to an exposed endpoint.

Announcement

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

Mitigation factors

Microsoft has not identified any mitigating factors for this vulnerability.

Affected software

  • Any .NET 6.0 application running on .NET 6.0.12 or earlier.

If your application uses the following package versions, ensure you update to the latest version of .NET.

.NET 6

Package name Affected version Patched version
Microsoft.NetCore.App.Runtime.linux-arm >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.linux-arm64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.linux-musl-arm >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.linux-musl-arm64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.linux-musl-x64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.linux-x64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.osx-arm64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.osx-x64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.win-arm >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.win-arm64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.win-x64 >= 6.0.0, < 6.0.12 6.0.13
Microsoft.NetCore.App.Runtime.win-x86 >= 6.0.0, < 6.0.12 6.0.13

Advisory FAQ

How do I know if I am affected?

If you have a runtime or SDK with a version listed, or an affected package 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 6.0. If you have installed one or more .NET SDKs through Visual Studio, Visual Studio will prompt you to update Visual Studio, which will also update your .NET SDKs.
  • If you have .NET Core 3.1 or greater installed, you can list the versions you have installed by running the dotnet --info command. You will see output like the following;
  • If you are using one of the affected packages, please update to the patched version listed above.
.NET Core SDK (reflecting any global.json):

 Version:   6.0.300
 Commit:    8473146e7d

Runtime Environment:

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

Host (useful for support):

  Version: 6.0.5
  Commit:  8473146e7d

.NET Core SDKs installed:

  6.0.300 [C:\Program Files\dotnet\sdk]

.NET Core runtimes installed:

  Microsoft.AspNetCore.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.AspNetCore.App]
  Microsoft.NETCore.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.NETCore.App]
  Microsoft.WindowsDesktop.App 6.0.5 [C:\Program Files\dotnet\shared\Microsoft.WindowsDesktop.App]

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

.NET 6.0 and and .NET 7.0 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 6.0 or .NET 7.0, please email details to secure@microsoft.com. 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://github.com/dotnet/runtime and https://github.com/dotnet/aspnet/. The Announcements repo (https://github.com/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.

Acknowledgements

Johan Gorter with AFAS Software

External Links

CVE-2023-21538

Revisions

V1.0 (January 10, 2023): Advisory published.

Version 1.0

Last Updated 2023-01-10

Author: rbhanda
Assignees: -
Labels:

Security, area-Meta, untriaged

Milestone: -

@niklasfp
Copy link

@ericmutta compare 6.0.13 to 6.012 in the runtime repo, it's fairly easy to spot which commit that fixes the issue. 😉

@ericmutta
Copy link
Contributor

@niklasfp thanks for the link to the comparison...though for the life of me, I am having trouble mapping this vague description:

A denial of service vulnerability exists in .NET 6.0 where a malicious client could cause a stack overflow which may result in a denial of service attack when an attacker sends an invalid request to an exposed endpoint.

To one of these commits (which have equally vague titles):

image

Scrolling through the entire list of changed files didn't help either...where is the code that could cause the stack to overflow? How would that translate into a denial of service? What type of request is being sent here? In what way is it invalid?

I realise that if steps were taken to make answers to such questions easy to get, it may mean that malicious actors would be able to take advantage of unpatched code out there...but the whole experience feels less than ideal as it stands.

Imagine going to the doctor for an operation, then when you are done, all they say is you were sick, but we fixed you now, just go home. Sure, you go home happy to have been fixed, but you can't help that nagging feeling of not knowing what the hell they did when they cut you open.

That's how these CVE announcements feel right now...and while I am happy that .NET security issues get fixed, I hope we as a community can figure out a way to make the process more transparent and a learning experience (after all, if the smart people working on .NET can create insecure code, I would very much love to learn from their experiences in order to improve my own .NET code).

@teo-tsirpanis
Copy link
Contributor

@ericmutta here is the exact commit: 26f99bc

@ericmutta
Copy link
Contributor

@teo-tsirpanis you just saved the day! Thanks for the link to the exact commit which has this very informative description:

ASP.Net Core is hitting a situation where an empty JObject from JSON.Net is being fed into XsdDataContractExporter and results in an uncatchable StackOverflowException. The reason is because JObject (actually, JToken) is a recursive object/collection which fails the recursive collection check in .Net Core up until 7.0. Before 7.0, the DCS classes in Core were based on a strange Silverlight port of DCS. In 7.0, the DCS space has been re-aligned with .Net 4.8 - and both 7.0 and NetFx have a more complete set of checks for recursive objects.

If future CVE announcements contained links to the relevant commits just like the one you provided, that would be fantastic all around 🚀

PS: to the .NET team and contributors who work hard on this framework (including fixing security issues) and then give it away to us for free - you are all awesome. We appreciate your hard work 🙏

@mr-sagarmandal
Copy link

Our project does not explicitly use the component, but it gets pulled as part of the .net restore as part of the .net 6 download dependencies.
image

Our project utilizes the latest version of dotnet 6 sdk i.e. 6.0.405 which includes the runtime 6.0.13.

Should the sdk be downloading the latest non vulnerable version of the package: Microsoft.NETCore.App.Runtime.win-x64 i.e. 6.0.13, which would mean somehow the wrong version of SDK/ runtime is being used.

Or does it mean as long as we are using .net runtime 6.0.13, the package version 6.0.0 cannot be exploited?

@jeffhandley jeffhandley removed the untriaged New issue has not been triaged by the area owner label Feb 17, 2023
@ericstj ericstj closed this as completed Aug 7, 2023
@ghost ghost locked as resolved and limited conversation to collaborators Sep 7, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests