Skip to content

Add NrbfDecoderFuzzer - #107385

Merged
adamsitnik merged 2 commits into
dotnet:mainfrom
buyaa-n:nrbf-fuzzer
Sep 6, 2024
Merged

Add NrbfDecoderFuzzer#107385
adamsitnik merged 2 commits into
dotnet:mainfrom
buyaa-n:nrbf-fuzzer

Conversation

@buyaa-n

Copy link
Copy Markdown
Contributor

Add fuzz test for NrbfDecoder

@ghostghost added the needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners label Sep 5, 2024
@buyaa-nbuyaa-n added area-System.Formats.Nrbf and removed needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners labels Sep 5, 2024
Comment threadsrc/libraries/Fuzzing/DotnetFuzzing/DotnetFuzzing.csproj Outdated
@buyaa-n
buyaa-n marked this pull request as ready for review September 5, 2024 21:54

@adamsitnikadamsitnik left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

LGTM, thanks a lot @buyaa-n !

@adamsitnik

Copy link
Copy Markdown
Member

/ba-g the OOM was fixed by #107433, it's unrelated to this PR

@adamsitnik
adamsitnik merged commit 1f6a0d4 into dotnet:mainSep 6, 2024
@adamsitnikadamsitnik added the binaryformatter-migration Issues related to the removal of BinaryFormatter and migrations away from it label Sep 6, 2024
@dotnet-policy-service

Copy link
Copy Markdown
Contributor

Tagging subscribers to 'binaryformatter-migration': @adamsitnik, @bartonjs, @jeffhandley, @terrajobst

@buyaa-n
buyaa-n deleted the nrbf-fuzzer branch September 6, 2024 16:42
adamsitnik pushed a commit to adamsitnik/runtime that referenced this pull request Sep 13, 2024
jtschuster pushed a commit to jtschuster/runtime that referenced this pull request Sep 17, 2024
carlossanlop pushed a commit that referenced this pull request Sep 17, 2024
* [NRBF] Don't use Unsafe.As when decoding DateTime(s) (#105749)
* Add NrbfDecoder Fuzzer (#107385)
* [NRBF] Fix bugs discovered by the fuzzer (#107368)
* bug #1: don't allow for values out of the SerializationRecordType enum range
* bug #2: throw SerializationException rather than KeyNotFoundException when the referenced record is missing or it points to a record of different type
* bug #3: throw SerializationException rather than FormatException when it's being thrown by BinaryReader (or sth else that we use)
* bug #4: document the fact that IOException can be thrown
* bug #5: throw SerializationException rather than OverflowException when parsing the decimal fails
* bug #6: 0 and 17 are illegal values for PrimitiveType enum
* bug #7: throw SerializationException when a surrogate character is read (so far an ArgumentException was thrown)
# Conflicts:
#	src/libraries/System.Formats.Nrbf/src/System/Formats/Nrbf/NrbfDecoder.cs
* [NRBF] throw SerializationException when a surrogate character is read (#107532)
(so far an ArgumentException was thrown)
* [NRBF] Fuzzing non-seekable stream input (#107605)
* [NRBF] More bug fixes (#107682)
- Don't use `Debug.Fail` not followed by an exception (it may cause problems for apps deployed in Debug)
- avoid Int32 overflow
- throw for unexpected enum values just in case parsing has not rejected them
- validate the number of chars read by BinaryReader.ReadChars
- pass serialization record id to ex message
- return false rather than throw EndOfStreamException when provided Stream has not enough data
- don't restore the position in finally - limit max SZ and MD array length to Array.MaxLength, stop using LinkedList<T> as List<T> will be able to hold all elements now
- remove internal enum values that were always illegal, but needed to be handled everywhere
- Fix DebuggerDisplay
* [NRBF] Comments and bug fixes from internal code review (#107735)
* copy comments and asserts from Levis internal code review
* apply Levis suggestion: don't store Array.MaxLength as a const, as it may change in the future
* add missing and fix some of the existing comments
* first bug fix: SerializationRecord.TypeNameMatches should throw ArgumentNullException for null Type argument
* second bug fix: SerializationRecord.TypeNameMatches should know the difference between SZArray and single-dimension, non-zero offset arrays (example: int[] and int[*])
* third bug fix: don't cast bytes to booleans
* fourth bug fix: don't cast bytes to DateTimes
* add one test case that I've forgot in previous PR
# Conflicts:
#	src/libraries/System.Formats.Nrbf/src/System/Formats/Nrbf/SerializationRecord.cs
* [NRBF] Address issues discovered by Threat Model (#106629)
* introduce ArrayRecord.FlattenedLength
* do not include invalid Type or Assembly names in the exception messages, as it's most likely corrupted/tampered/malicious data and could be used as a vector of attack.
* It is possible to have binary array records have an element type of array without being marked as jagged
---------
Co-authored-by: Buyaa Namnan <bunamnan@microsoft.com>
sirntar pushed a commit to sirntar/runtime that referenced this pull request Sep 30, 2024
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Oct 7, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

area-System.Formats.Nrbfbinaryformatter-migrationIssues related to the removal of BinaryFormatter and migrations away from it

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants

@buyaa-n@adamsitnik@ericstj@MihaZupan