googleprojectzero / googleprojectzero/fuzzilli

Crash

Open
#556 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Swift
Stars
2.3k
Forks
367
Avg merge
23h 53m
Merged PRs (30d)
1

Description

[CABB79DF:JavaScriptLifter] WasmLifting failed with error invalidInput, current failure count: 3 (failure rate: 0.00384%)
Fuzzilli/TypeSystem.swift:745: Fatal error: .wasmFunctionDef([.wasmf64, .wasmi32, .wasmRef(.Abstract(null WasmAny)), .wasmRef(.Abstract(null WasmAny)), .wasmi32, .wasmRef(.Abstract(null WasmAny))] => []) is not a Wasm signature type defintion

πŸ’£ Program crashed: Illegal instruction at 0x000075fb452e2628

Platform: x86_64 Linux (Ubuntu 24.04.4 LTS)

Thread 16 crashed:

0 0x000075fb452e2628 assertionFailure(:_:file:line🎏) + 264 in libswiftCore.so
1 ILType.wasmFunctionSignatureDefSignature.getter + 278 in FuzzilliCli at /home/turnerhackz1/Desktop/fuzzilli-main05/Sources/Fuzzilli/FuzzIL/TypeSystem.swift:745:13

743β”‚ let desc = (wasmType as? WasmTypeDefinition)?.description
744β”‚ guard let desc = desc as? WasmSignatureTypeDescription else {
745β”‚ fatalError("(self) is not a Wasm signature type defintion")
β”‚ β–²
746β”‚ }
747β”‚ return desc.signature

2 JSTyper.analyze(_:) + 13839 in FuzzilliCli at /home/turnerhackz1/Desktop/fuzzilli-main05/Sources/Fuzzilli/FuzzIL/JSTyper.swift:837:66

835β”‚ let fct = instr.input(i)
836β”‚ let definingInstruction = defUseAnalyzer.definition(of: fct)
837β”‚ let signature = type(of: instr.input(i + 1)).wasmFunctionSignatureDefSignature
β”‚ β–²
838β”‚ // TODO(cffsmith): Once we change the way we track signatures, we should also store the JS Signature here if we have one. The table might contain JS functions but we lose that signature in the entries. Which is why we convert back into JS Signatures here.
839β”‚ let jsSignature = ProgramBuilder.convertWasmSignatureToJsSignature(signature)

3 JavaScriptLifter.lift(_:withOptions:) + 3145 in FuzzilliCli at /home/turnerhackz1/Desktop/fuzzilli-main05/Sources/Fuzzilli/Lifting/JavaScriptLifter.swift:198:20

196β”‚
197β”‚ // Collect type information that we might pass to the WasmLifter.
198β”‚ typer?.analyze(instr)
β”‚ β–²
199β”‚
200β”‚ // Singular operation handling:

4 Fuzzer.execute(_:withTimeout:purpose:) + 115 in FuzzilliCli at /home/turnerhackz1/Desktop/fuzzilli-main05/Sources/Fuzzilli/Fuzzer.swift:754:29

752β”‚ assert(runner.isInitialized)
753β”‚
754β”‚ let script = lifter.lift(program)
β”‚ β–²
755β”‚
756β”‚ dispatchEvent(events.PreExecute, data: (program, purpose))

5 Fuzzer.importProgram(_:origin:enableDropout:) + 253 in FuzzilliCli at /home/turnerhackz1/Desktop/fuzzilli-main05/Sources/Fuzzilli/Fuzzer.swift:498:25

496β”‚ }
497β”‚
498β”‚ let execution = execute(program, purpose: .programImport)
β”‚ β–²
499β”‚
500β”‚ var wasImported = false

6 Fuzzer.importProgramWithFixup(_:origin:) + 66 in FuzzilliCli at /home/turnerhackz1/Desktop/fuzzilli-main05/Sources/Fuzzilli/Fuzzer.swift:628:22

626β”‚ ) {
627β”‚ var program = originalProgram
628β”‚ var result = importProgram(program, origin: origin)
β”‚ β–²
629β”‚
630β”‚ // Only attempt fixup if the program failed to execute successfully. In particular, ignore timeouts and

7 Fuzzer.fuzzOne() + 911 in FuzzilliCli at /home/turnerhackz1/Desktop/fuzzilli-main05/Sources/Fuzzilli/Fuzzer.swift:1007:43

1005β”‚ }
1006β”‚
1007β”‚ let (result, fixupAttempts) = importProgramWithFixup(
β”‚ β–²
1008β”‚ program, origin: .corpusImport(mode: currentCorpusImportJob.importMode))
1009β”‚ currentCorpusImportJob.notifyImportOutcome(result, fixupAttempts: fixupAttempts)

8 0x00005b905aa86d49 thunk for @escaping @callee_guaranteed () -> () + 24 in FuzzilliCli
...

Backtrace took 9.15s

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up β€” it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start at Sources/Fuzzilli/FuzzIL/TypeSystem.swift:745 and follow the reported path through JSTyper.swift:837, JavaScriptLifter.swift:198, and Fuzzer.swift:498. Reproduce the invalidInput crash during corpus import and determine how the non-signature Wasm type reaches wasmFunctionSignatureDefSignature. Done means the reported input no longer triggers the fatal error and the behavior is covered by an appropriate regression test.

Written by the indexing model from the issue text.

Assessment

Tech stack
javascript, swift, wasm
Domain
testing-qa, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.