java-topology/defects/transformers-0002/test/Transformers0002RegnetHfTokenLoggedTest.java
russell@unturf.com 81bef63b2e transformers+vllm: 3 new defects, all 5 MOADs scanned
transformers-0002: MOAD-0004 (CWE-312) regnet convert script logs HF_TOKEN verbatim
transformers-0003: MOAD-0001 (CWE-407) convert_tokens_to_string O(T×S) list scan
  - marian, m2m_100, speech_to_text, siglip, gpt_sw3 all affected
  - all_special_tokens is list[str]; fix: cache set() before loop; 5x speedup

vllm-0002: MOAD-0001 (CWE-407) Grok2Tokenizer O(N×V) dict.values() scan
  - decode() and convert_ids_to_tokens() use .values() view per token
  - sibling Mistral tokenizer already uses frozenset correctly
  - fix: add _special_token_ids frozenset at __init__; 10x speedup at N=2048, V=200

MOADs 0002/0003/0005 CLEAN for both repos
2026-03-31 20:17:09 -04:00

65 lines
2.7 KiB
Java

import java.util.*;
import java.util.logging.*;
/**
* transformers-0002: convert_regnet_seer_10b_to_pytorch.py logs HF_TOKEN verbatim
*
* Models CWE-312 (MOAD-0004): credential logged in cleartext.
* Verifies that the defective pattern emits the secret and the patched pattern
* emits a safe redacted message instead.
*
* Mirrors src/transformers/models/regnet/convert_regnet_seer_10b_to_pytorch.py line 236.
*/
public class Transformers0002RegnetHfTokenLoggedTest {
static final String FAKE_TOKEN = "hf_FAKESECRETTOKEN_1234567890abcdef";
static List<String> logMessages = new ArrayList<>();
static class CapturingLogger {
void info(String msg) {
logMessages.add(msg);
}
}
// --- Defective implementation ---
static void pushToHubDefective(CapturingLogger logger, String hfToken) {
// Mirrors: logger.info(f"Token is {os.environ['HF_TOKEN']}")
logger.info("Token is " + hfToken);
logger.info("Loading our model.");
}
// --- Patched implementation ---
static void pushToHubPatched(CapturingLogger logger, String hfToken) {
// Token value is not logged - only presence/intent noted
logger.info("Pushing model to the Hub (token loaded from HF_TOKEN env var).");
logger.info("Loading our model.");
}
public static void main(String[] args) {
CapturingLogger logger = new CapturingLogger();
// --- Test defective: secret appears in log ---
logMessages.clear();
pushToHubDefective(logger, FAKE_TOKEN);
boolean secretLeaked = logMessages.stream().anyMatch(m -> m.contains(FAKE_TOKEN));
assert secretLeaked : "FAIL: defective code should log the token verbatim";
// --- Test patched: secret does NOT appear in log ---
logMessages.clear();
pushToHubPatched(logger, FAKE_TOKEN);
boolean secretInPatchedLog = logMessages.stream().anyMatch(m -> m.contains(FAKE_TOKEN));
assert !secretInPatchedLog
: "FAIL: patched code must not log the token, but found it in: " + logMessages;
// Patched log should still confirm the push is happening
boolean hasSafeMessage = logMessages.stream().anyMatch(m -> m.contains("HF_TOKEN"));
assert hasSafeMessage : "FAIL: patched log should mention env var name (not value)";
System.out.println("transformers-0002 MOAD-0004 HF_TOKEN credential logging");
System.out.println(" Defective: token logged verbatim → secret exposed in log");
System.out.println(" Patched: token value omitted → safe redacted message");
System.out.println(" CWE-312: Cleartext Storage of Sensitive Information");
System.out.println("PASS");
}
}