After the succes of the MS-RPC Fuzzer, I was wondering if the same approach could be applied to COM/DCOM. This involes fuzzing the COM classes and their interface definitions. Gain insights into COM/DCOM implementations that may be vulnerable using an automated approach and make it easy to visualize the data. By following this approach, a security researcher will hopefully identify interesting COM/DCOM classes in such a time, that would take a manual approach significantly more.
Note
The owner of this repository is not responsible for any damage of the usage made using these tools. These are for legal purposes only. Use at your own risks.
- OleViewDotNet PowerShell module
 - PowerShell <7 (PS 7 is not supported)
 
Clone the repository and import the COM-Fuzzer module:
Import-Module .\COM-Fuzzer.psm1If the required PowerShell module OleViewDotNet is not installed, you will be asked to install it.
- Get COM server data for CLSID 
13709620-C279-11CE-A49E-444553540000 
Get-ComServerData -OutPath .\output\ -CLSID 13709620-C279-11CE-A49E-444553540000- Execute calculator
 
'.\output\ComServerData.json' | Invoke-ComFuzzer -Procedure ShellExecute -StringInput "calc.exe" -OutPath .\output\For more examples see Fuzzing examples.
graph TD
    User([User])
    %% Input and output styling
    classDef input fill:#d4fcd4,stroke:#2b8a3e,stroke-width:2px,color:#000;
    classDef output fill:#fff3cd,stroke:#ffbf00,stroke-width:2px,color:#000;
    %% Phase 1: Gather COM Data
    User --> A1[Get-ComServerData]
    A1 --> A2[Target or context specified]
    A2 --> A3[ComServerData.json]
    A3 --> B1[Invoke-ComFuzzer]
    %% Phase 2: Fuzzing
    B1 --> B2[log.txt Call History]
    B1 --> B3[allowed.json]
    B1 --> B4[denied.json]
    %% All fuzzer outputs used in Phase 3
    B3 --> C1[Import-DataToNeo4j]
    B4 --> C1
    %% Phase 3: Analysis
    C1 --> C2[Neo4j Database]
    C2 --> C3[Graph Visualization & Querying]
    %% Apply styling
    class A3 input;
    class B3,B4,B2 output;
    %% Labels for clarity
    subgraph Phase1 [Phase 1: Initialize COM]
        A1
        A2
        A3
    end
    subgraph Phase2 [Phase 2: Fuzzing]
        B1
        B2
        B3
        B4
    end
    subgraph Phase3 [Phase 3: Analysis]
        C1
        C2
        C3
    end
    - Write cypher queries templates for Neo4j
 - Implement time out for invoking procedures that take long
 
- Find root cause to some PowerShell crashes and fix them
 
This tool is heavily built upon OleViewDotNet by James Forshaw with Google Project Zero. This tool uses the OleViewDotNet module to do most tasks.