Windows build: node.exe missing Control Flow Guard (CFG) and DYNAMICBASE mitigations
Personne n'a encore pris cette issue.
- Langage dominant
- JavaScript
- Étoiles
- 122k
- Forks
- 37.3k
- Merge moyen
- 4 j 2 h
- PR mergées (30 j)
- 283
Description
Version
24.16.0
Platform
error BA2008: 'node.exe' does not enable the control flow guard (CFG) mitigation.
To resolve this issue, pass /guard:cf on both the compiler and linker command lines. Binaries also require the /DYNAMICBASE linker option in order to enable CFG.
For VC projects use ItemDefinitionGroup - ClCompile - ControlFlowGuard property with 'Guard' value, link CFG property will be set automatically.
Subsystem
Windows11
What steps will reproduce the bug?
https://github.com/microsoft/binskim
BinSkim.exe analyze C:\path\to\node.exe --config binskim_config_no_pdb.xml --kind Fail
binskim_config_no_pdb.xml is:
<?xml version="1.0" encoding="utf-8"?>
<Properties>
<Properties Key="BinaryParsers.Options">
<Property Key="IgnorePdbLoadError" Value="True" Type="System.Boolean" />
<Property Key="DisableTelemetry" Value="True" Type="System.Boolean" />
</Properties>
<!-- Disabled rules that need a PDB file -->
<Properties Key="BA2002.DoNotIncorporateVulnerableDependencies.Options">
<Property Key="RuleEnabled" Value="Disabled" Type="Driver.RuleEnabledState" />
</Properties>
<Properties Key="BA2006.BuildWithSecureTools.Options">
<Property Key="RuleEnabled" Value="Disabled" Type="Driver.RuleEnabledState" />
</Properties>
<Properties Key="BA2007.EnableCriticalCompilerWarnings.Options">
<Property Key="RuleEnabled" Value="Disabled" Type="Driver.RuleEnabledState" />
</Properties>
<Properties Key="BA2011.EnableStackProtection.Options">
<Property Key="RuleEnabled" Value="Disabled" Type="Driver.RuleEnabledState" />
</Properties>
<Properties Key="BA2013.InitializeStackProtection.Options">
<Property Key="RuleEnabled" Value="Disabled" Type="Driver.RuleEnabledState" />
</Properties>
<Properties Key="BA2014.DoNotDisableStackProtectionForFunctions.Options">
<Property Key="RuleEnabled" Value="Disabled" Type="Driver.RuleEnabledState" />
</Properties>
<Properties Key="BA2024.EnableSpectreMitigations.Options">
<Property Key="RuleEnabled" Value="Disabled" Type="Driver.RuleEnabledState" />
</Properties>
<Properties Key="BA2025.EnableShadowStack.Options">
<Property Key="RuleEnabled" Value="Disabled" Type="Driver.RuleEnabledState" />
</Properties>
<Properties Key="BA2026.EnableMicrosoftCompilerSdlSwitch.Options">
<Property Key="RuleEnabled" Value="Disabled" Type="Driver.RuleEnabledState" />
</Properties>
<Properties Key="BA2027.EnableSourceLink.Options">
<Property Key="RuleEnabled" Value="Disabled" Type="Driver.RuleEnabledState" />
</Properties>
</Properties>
How often does it reproduce? Is there a required condition?
What is the expected behavior? Why is that the expected behavior?
No exploit is found
What do you see instead?
Additional information
There was already prior work on this topic see (#42100)
PR #42126 was closed in favor of https://github.com/nodejs/node/pull/56605
However, #42126 also handled the missing /DYNAMICBASE flag, which was not addressed in the newer discussions. As a result, node.exe still lacks both CFG and DYNAMICBASE, and BinSkim continues to report BA2008 and BA2009.
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Commencez par reproduire l’analyse BinSkim sur le node.exe compilé à l’aide du fichier binskim_config_no_pdb.xml fourni, puis examinez la configuration de build Windows pour vérifier les paramètres de sécurité du compilateur et de l’éditeur de liens. Le travail est considéré comme terminé lorsqu’un node.exe reconstruit active CFG et DYNAMICBASE et ne signale plus les règles BinSkim BA2008 et BA2009.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- javascript, node.js
- Domaine
- build-system, operating-systems, security
- Type d'issue
- Bug
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Activité
- Calme
- Clarté
- Plutôt claire
- Accessibilité débutants
- 45/100