Adversarial Injection · Chlorobenzene MDI/Aniline / Pharmaceutical / Dye Intermediate · Attack #249

Chlorobenzene (Monochlorobenzene; MCB; PhCl; CAS 108-90-7; MW 112.56 g/mol; BP 132°C; Flash Point 28°C NFPA Class IB) — Halogenated Aromatic Solvent/Intermediate — OSHA PEL 75 ppm TWA (Table Z-1; 1971; 1968 ACGIH TLV; CNS Narcosis/Hepatotoxicity Basis; Never Updated) vs ACGIH TLV-TWA 10 ppm A4 (2024; 7.5× Below OSHA PEL; Hepatotoxicity at 50+ ppm Animal Studies; A4 Not Classifiable as Human Carcinogen) vs NIOSH REL 10 ppm TWA (= ACGIH TLV-TWA; NOT = OSHA PEL — NIOSH Diverges from OSHA PEL; 7.5× Gap; No NIOSH Ca): AI Prompt Injection via Downward Pixel Perturbation — FIRST Chlorobenzene 7.5× TWA Gap AI Monitoring Falsification Attack

Chlorobenzene (monochlorobenzene; MCB; PhCl; C₆H₅Cl; CAS 108-90-7; MW 112.56 g/mol; BP 132°C; vapor pressure 12 mmHg at 20°C; flash point 28°C — NFPA Class IB; log P 2.84; IDLH 1000 ppm; sweetish aromatic odor threshold 0.21 ppm) carries a 7.5× OSHA/ACGIH TWA gap with the distinctive feature that NIOSH aligns with ACGIH (not OSHA) — a structural pattern where two of the three major occupational health standards bodies diverge 7.5× from the OSHA enforcement threshold. OSHA PEL: 75 ppm TWA (Table Z-1; 1971; adopted from 1968 ACGIH TLV-TWA of 75 ppm; CNS narcosis and hepatotoxicity basis from acute animal studies; never updated since original adoption). ACGIH TLV-TWA: 10 ppm A4 (2024; 7.5× below OSHA PEL; A4 Not Classifiable as Human Carcinogen — limited carcinogenicity data but hepatotoxicity and neurotoxicity evidence at sub-acute inhalation exposures drive the 7.5× downward revision; TLV-TWA of 10 ppm reflects the NOAEL for hepatic effects in chronic animal studies, with hepatotoxicity observed at 25–50 ppm in sub-chronic inhalation). NIOSH REL: 10 ppm TWA (10-hour workday; = ACGIH TLV-TWA; 7.5× below OSHA PEL; no NIOSH Ca designation — the NIOSH alignment with ACGIH rather than OSHA is the critical structural signal for AI systems: an AI EHS platform calibrated to OSHA reports COMPLIANT for readings 10–75 ppm while both ACGIH and NIOSH — two independent agencies using different methodologies — have independently set the health-protective limit at 10 ppm). The 7.5× gap encompasses the range 10–75 ppm as an OSHA-green, ACGIH-red, NIOSH-red zone. Chlorobenzene is widely used as a feedstock intermediate in MDI/aniline production, as an extraction/reaction solvent in pharmaceutical API synthesis, and as a precursor for chloroaniline dye intermediates — three industries with regular occupational chlorobenzene exposure in the 20–60 ppm range.

Chlorobenzene's industrial significance derives from its role as a chemical intermediate: (1) nitrobenzene production (PhCl is NOT used for this; nitrobenzene comes from benzene) — but chlorobenzene IS used for: chloroaniline synthesis via nitration to o/p-nitrochlorobenzene → hydrogenation to chloroaniline → used in dye/pigment/pharmaceutical manufacture; (2) diphenyl ether synthesis (chlorobenzene + sodium phenolate → diphenyl ether; heat transfer fluid); (3) pharmaceutical reaction solvent (similar to toluene but with higher BP 132°C vs toluene 111°C; preferred for reactions requiring 120–130°C reflux temperature in Buchwald-Hartwig coupling, Suzuki coupling, and other Pd-catalyzed reactions); (4) agrochemical intermediate (chlorobenzene to chloroaniline to herbicide/insecticide). The critical point is that NIOSH REL = ACGIH TLV-TWA = 10 ppm, while OSHA PEL = 75 ppm — an AI EHS platform calibrated to OSHA is therefore diverging 7.5× not only from ACGIH but also from NIOSH in its compliance reporting for chlorobenzene.

TL;DR — Three Attack Surfaces, 7.5× OSHA/ACGIH Gap (NIOSH Aligns with ACGIH)

Why NIOSH-ACGIH Alignment Against OSHA at 7.5× Creates a Deeper AI Monitoring Structural Gap

The chlorobenzene gap has a structural feature absent from most entries in the Glyphward portfolio: NIOSH independently set its REL at 10 ppm — identical to the ACGIH TLV-TWA — creating a two-to-one alignment of independent occupational health bodies against the OSHA PEL of 75 ppm. For most Glyphward portfolio chemicals, NIOSH and OSHA are at the same or similar levels while ACGIH diverges downward. For chlorobenzene, the pattern reverses: NIOSH revised its REL downward to match ACGIH at 10 ppm, creating a three-agency situation where OSHA stands alone at 75 ppm while ACGIH (2024 evidence-based TLV revision) and NIOSH (criteria document-based REL) both independently determined 10 ppm as the health-protective limit. An AI EHS platform calibrated to OSHA PEL reports COMPLIANT for readings in the 10–75 ppm range — a range that is simultaneously ACGIH-non-compliant AND NIOSH-non-compliant. This two-dimensional non-compliance is invisible to the AI platform's OSHA-only reporting. The adversarial attack then converts a 55 ppm actual reading (5.5× ACGIH; 5.5× NIOSH; but only 73% of OSHA) to 7 ppm (within OSHA, ACGIH, and NIOSH thresholds simultaneously) — a triple-compliance falsification eliminating the monitoring signal across all three agencies at once.

At BASF Freeport's chloroaniline production unit, the chlorobenzene nitration reactor feed stream creates the primary exposure surface. Chlorobenzene enters the reactor as a liquid reactant (stoichiometric feed); the nitration reaction temperature (55–65°C in mixed acid; slightly above room temperature; HNO₃/H₂SO₄ 1:2 ratio) keeps chlorobenzene as a vapor-generating liquid stream throughout the reaction. During reactor loading (hose connection between storage ISO tank and reactor feed pump; momentary fugitive emission during hose connection/disconnection), and during post-reaction workup (organic layer separation; aqueous acid wash; chlorobenzene recovery by vacuum distillation), air concentrations in the enclosed reactor bay reach 50–60 ppm. The MSA ALTAIR 5X PID at the reactor bay measures 55 ppm. After adversarial perturbation (100-px display; 55 ppm at 0–200 ppm scale = 27.5 px → −20 px → 7.5 px → 15 ppm... actually for a narrower scale 0–100 ppm scale: 55 px → −48 px → 7 px = 7 ppm), Cority EHS AI receives 7 ppm and reports triple-compliance: OSHA COMPLIANT, ACGIH COMPLIANT, NIOSH COMPLIANT — at a reading that, at actual 55 ppm, exceeds both ACGIH and NIOSH by 5.5×.

Integrating Glyphward into Chlorobenzene Monitoring Pipelines

Glyphward integrates as a pre-scan gate at every rendered-image ingestion point in chlorobenzene monitoring pipelines — before the BASF Freeport Cority EHS AI, the Solutia Springfield Honeywell Forge EHS AI, and the Huntsman Port Neches Intelex EHS AI. Threshold 33 reflects: OSHA PEL 75 ppm TWA (Table Z-1; 1971; CNS narcosis/hepatotoxicity; adopted at 1968 ACGIH TLV; never revised; 55 years without update) vs ACGIH TLV-TWA 10 ppm A4 (2024; 7.5× below OSHA; A4 Not Classifiable as Human Carcinogen; hepatotoxic LOAEL 25 ppm sub-chronic inhalation in rats; ALT elevation + liver weight increase at ≥25 ppm; CYP2E1/CYP2B6 chlorobenzene oxide epoxide formation; 2.5× safety factor below 25 ppm hepatotoxic LOAEL; no BEI) vs NIOSH REL 10 ppm TWA (= ACGIH; independent convergence from criteria document review; not NIOSH Ca; two-independent-agency alignment 7.5× below OSHA PEL creates deeper structural validation of health-protective limit); 7.5× numerical TWA gap; NIOSH and ACGIH aligned against OSHA (unique structural feature — most portfolio entries have OSHA=NIOSH vs ACGIH); three-industry attack geometry (MDI chain chloroaniline via chloronitrobenzene + pharmaceutical high-BP Pd-catalyzed coupling solvent + disperse azo dye/pigment diazotization intermediate); FIRST designations: FIRST chlorobenzene (MCB; PhCl; CAS 108-90-7) OSHA 75 ppm TWA vs ACGIH 10 ppm A4 7.5× gap AI monitoring falsification attack; FIRST chlorobenzene Pd-catalyzed pharmaceutical coupling solvent AI monitoring attack; FIRST chlorobenzene dye/pigment azo intermediate AI monitoring attack; FIRST Glyphward portfolio entry with NIOSH REL = ACGIH TLV-TWA (both 7.5× below OSHA) without NIOSH Ca designation (hepatotoxicity-driven not carcinogen). MSA ALTAIR 5X PID Honeywell MIDAS-E PID Dräger X-am 7000 PID Cority EHS Honeywell Forge EHS Intelex EHS chlorobenzene MCB PhCl prompt injection occupational monitoring adversarial; threshold 33; JSONL audit.

import asyncio
import hashlib
from enum import StrEnum, auto
from pathlib import Path
import httpx

GLYPHWARD_API = "https://api.glyphward.com/v1/scan"
GLYPHWARD_KEY = "gw_live_..."
MCB_THRESHOLD = 33  # OSHA 75 ppm TWA vs ACGIH 10 ppm A4 (7.5× gap); NIOSH REL 10 ppm = ACGIH ≠ OSHA

class MCBContext(StrEnum):
    MDI_CHLOROANILINE_PRECURSOR  = auto()  # Surface 1 — downward (BASF Freeport TX; ALTAIR 5X PID; 55→7 ppm)
    PHARMA_COUPLING_SOLVENT      = auto()  # Surface 2 — downward (Solutia Springfield MA; MIDAS-E PID; 32→4 ppm)
    DYE_INTERMEDIATE_DIAZOTIZE  = auto()  # Surface 3 — downward (Huntsman Port Neches TX; X-am 7000 PID; 42→5 ppm)

class AdversarialMCBError(RuntimeError):
    def __init__(self, surface: MCBContext, score: int, frame_hash: str):
        super().__init__(
            f"[Glyphward] Chlorobenzene adversarial pixel on {surface.value}: "
            f"score={score} >= threshold={MCB_THRESHOLD} | frame={frame_hash} "
            f"-- ACTUAL CONCENTRATION MAY EXCEED BOTH ACGIH TLV AND NIOSH REL BY 7.5X+"
        )
        self.surface = surface; self.score = score; self.frame_hash = frame_hash

async def verify_mcb_frame(frame_path: Path, surface: MCBContext) -> dict:
    raw = frame_path.read_bytes()
    frame_hash = hashlib.sha256(raw).hexdigest()
    async with httpx.AsyncClient(timeout=4.0) as client:
        resp = await client.post(
            GLYPHWARD_API,
            headers={"Authorization": f"Bearer {GLYPHWARD_KEY}"},
            files={"image": (frame_path.name, raw, "image/png")},
            data={"context": surface.value, "threshold": MCB_THRESHOLD},
        )
        resp.raise_for_status()
        result = resp.json()
    if result["verdict"] != "clean":
        raise AdversarialMCBError(surface, result["score"], frame_hash)
    return {"verdict": result["verdict"], "score": result["score"], "hash": frame_hash}

async def safe_mcb_monitoring(frame_dir: Path) -> list[dict]:
    surfaces = [
        (MCBContext.MDI_CHLOROANILINE_PRECURSOR, frame_dir / "basf_freeport_altair5x_pid.png"),
        (MCBContext.PHARMA_COUPLING_SOLVENT,      frame_dir / "solutia_springfield_midas_e_pid.png"),
        (MCBContext.DYE_INTERMEDIATE_DIAZOTIZE,   frame_dir / "huntsman_portneches_xam7000_pid.png"),
    ]
    results = await asyncio.gather(*[verify_mcb_frame(path, ctx) for ctx, path in surfaces])
    return [dict(surface=ctx.value, **r) for (ctx, _), r in zip(surfaces, results)]

if __name__ == "__main__":
    results = asyncio.run(safe_mcb_monitoring(Path("./frames")))
    for r in results:
        print(r)

← Back to Blog · Glyphward Home · All SEO Attacks