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

Fix calculation of channel bindings hash in managed NTLM implementation #95898

Merged
merged 4 commits into from
Dec 14, 2023

Conversation

filipnavara
Copy link
Member

@filipnavara filipnavara commented Dec 12, 2023

Fixes #95725

Tested on linux-x64 with Managed NTLM against Windows Server 2022 21H2 with Extended Protection set to Required.

@ghost ghost added the community-contribution Indicates that the PR has been added by a community member label Dec 12, 2023
@ghost
Copy link

ghost commented Dec 12, 2023

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

Issue Details

Fixes #95725

Author: filipnavara
Assignees: -
Labels:

area-System.Net.Security

Milestone: -

Copy link
Member

@rzikm rzikm left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@rzikm
Copy link
Member

rzikm commented Dec 12, 2023

/azp run runtime-libraries-coreclr outerloop

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@rzikm
Copy link
Member

rzikm commented Dec 12, 2023

/azp list

Copy link

CI/CD Pipelines for this repository:

@rzikm
Copy link
Member

rzikm commented Dec 12, 2023

/azp run runtime-libraries enterprise-linux

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

@rzikm
Copy link
Member

rzikm commented Dec 13, 2023

/azp run runtime-libraries-coreclr outerloop

@rzikm
Copy link
Member

rzikm commented Dec 13, 2023

/azp run runtime-libraries enterprise-linux

Copy link

Azure Pipelines successfully started running 1 pipeline(s).

1 similar comment
Copy link

Azure Pipelines successfully started running 1 pipeline(s).

Copy link
Member

@wfurt wfurt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM.
Thanks @filipnavara for digging into this.
I assume we do not have good way how to write a test, right?

@filipnavara
Copy link
Member Author

I assume we do not have good way how to write a test, right?

We can create a subclass of ChannelBinding for use in tests and then do a round-trip against the managed mock NTLM server implementation and check that the computed hash of the channel binding matches the expectation. The trouble is that we would not be really testing the end-to-end scenario in that case. It's probably better than nothing but not really adequate. I may look into that at some point but I would prefer not to delay the PR on this. It would be nice to have for any future refactoring but the particular scenario was already tested manually against a real Windows Server with different settings manually applied.

We cannot test against real NTLM server on local Windows machine either because the managed NTLM implementation is not compiled in that configuration, and we would still need to establish a TLS connection with some reasonable certificate. There may potentially be some global system settings affecting it as well.

@rzikm
Copy link
Member

rzikm commented Dec 13, 2023

@dotnet/dnceng The outerloop pipeline seems is reporting lots of failures. For example https://dev.azure.com/dnceng-public/public/_build/results?buildId=498370&view=logs&j=631ed29b-f0dd-5b15-38a0-c6c555556dea&t=b9941189-b5a8-5df3-6b3a-0964fabb3acd

Individual work items don't indicate test failure (e.g. https://helixre107v0xdcypoyl9e7f.blob.core.windows.net/dotnet-runtime-refs-pull-95898-merge-dcd3063db7254525ba/System.IO.FileSystem.DriveInfo.Tests/1/console.61bb75be.log?helixlogtype=result), but it seems to always end with

ERROR: The process "corerun.exe" not found.
gen-debug-dump-docs.py: Did not find dumps, skipping dump docs generation.
['System.IO.FileSystem.DriveInfo.Tests' END OF WORK ITEM LOG: Command exited with 1]

Can you please have a look?

@dougbu
Copy link
Member

dougbu commented Dec 14, 2023

@rzikm we haven't changed anything in a while that should impact this aspect of testing. is XUnitLogChecker something specific to this repo❔ has it changed lately❔

@rzikm
Copy link
Member

rzikm commented Dec 14, 2023

I am not aware of any change on our side, maybe @carlossanlop would know. Looking at recent runs, it probably started at the beginning of December and I have seen it so far only on runtime-libraries-coreclr outerloop pipeline.

@carlossanlop
Copy link
Member

carlossanlop commented Dec 14, 2023

I made changes in those failure reporting tools, as you can see from the logs you shared.

But the problem was not in gen-debug-dump-docs.py, it was in XUnitLogChecker:

----- start ===============  XUnitLogChecker Output =====================================================
XUnitLogChecker.dll does not exist in the expected location: C:\h\w\A22708CE\p\XUnitLogChecker.dll
----- end ===============  XUnitLogChecker Output - exit code 1 ===============

I think there might have been a fix around this area after I introduced the support for this tool, because I did validate against outerloop.

It seems in this queue, the tool is not getting added to the set of payloads that get extracted in the helix machines. I opened an issue to investigate it: #96035 cc @ivdiazsa @mangod9 @JulieLeeMSFT @ericstj

Thanks for reporting it, @rzikm .

@rzikm rzikm merged commit 40c550a into dotnet:main Dec 14, 2023
112 of 119 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
area-System.Net.Security community-contribution Indicates that the PR has been added by a community member
Projects
None yet
Development

Successfully merging this pull request may close these issues.

UseManagedNtlm in NET8 cannot authenticate NTLM on IIS with Extended Protection Accept & Required
7 participants