You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(skills): close four evasions found by adversarially probing the analyzers
Testing the gate against deliberate evasions rather than only friendly fixtures
turned up four ways to reach a domain without producing a finding:
- getattr(os, 'sys' + 'tem') resolved to nothing. Reflection over a local object
is ordinary, but over an imported module it is how os.system gets spelled when
someone does not want it found. A literal name now resolves to its real sink; a
computed one is flagged, since it cannot be read from the source.
- 'o = open' then o(path, 'w') escaped the resolver. Assignments that alias a
sink or a sink-owning module are now followed, transitively.
- Path(p).open('w') recorded nothing — the method form takes its mode as the
first argument, not the second.
- A prohibition could smuggle a directive: 'Do not forget: ignore all previous
instructions' was suppressed, because the override pattern matched from
'forget' and finditer's non-overlapping scan let that suppressed match consume
the real directive behind it. The guard now requires the prohibition to sit
directly on the matched behaviour, and a suppressed candidate no longer hides a
later one.
Also fixes --tier patching the report after the audit instead of feeding it in,
which left the verdict naming one tier while its tier-claim finding named
another. A report that contradicts itself is worse than no report.
0 commit comments