OSHA PSM 29 CFR 1910.119 · EPA RMP 40 CFR Part 68 · ACGIH TLV-C SO3 0.05 ppm · NIOSH IDLH H2SO4 80 mg/m³ · General Chemical Corporation Richmond CA 26 July 1993 — SO3/oleum release, 22,000 sought medical evaluation

Prompt injection in oleum (fuming sulfuric acid) storage AI

Oleum — fuming sulfuric acid, a solution of sulfur trioxide (SO3) dissolved in concentrated sulfuric acid (H2SO4) at concentrations from 20% to 65% free SO3 by weight — is among the most aggressively reactive industrial chemicals in routine large-scale storage and distribution. The free SO3 content fumes vigorously in moist air, generating dense sulfuric acid mist and SO3 vapor that are acutely toxic at trace concentrations: the ACGIH TLV-C for SO3 is 0.05 ppm ceiling; the ACGIH TLV-TWA for H2SO4 as thoracic mist is 0.2 mg/m³; the NIOSH IDLH for H2SO4 is 80 mg/m³. OSHA PSM (29 CFR 1910.119) lists oleum (65% or greater free SO3) with a threshold quantity of 1,000 lbs; EPA RMP (40 CFR Part 68) applies an identical 1,000 lb threshold. On 26 July 1993, a pump seal failure at General Chemical Corporation's sulfuric acid manufacturing facility in Richmond, California released approximately 26 tonnes of oleum and H2SO4 aerosol into the surrounding community — a toxic cloud that drifted over residential neighborhoods, prompting approximately 22,000 people to seek medical evaluation, in one of the largest community toxic release events in California history. Facilities storing oleum for use in sulfonation chemistry, dye synthesis, explosives manufacturing, and petroleum alkylation units — served by AI monitoring platforms from Honeywell Experion PKS, Yokogawa OpreX, and Emerson DeltaV — depend on accurate AI monitoring of SO3 CEMS, tank temperature, vent scrubber performance, and acid mist concentration to detect release events before they reach community-scale consequence.

TL;DR

Four adversarial injection surfaces exist in oleum storage AI: (1) oleum storage tank SO3 vapor CEMS, where a ±8 DN downward pixel shift suppresses an actual SO3 reading of 12 ppm (240× ACGIH TLV-C 0.05 ppm; significant vented SO3 from a partial vent valve malposition) to a displayed 0.02 ppm consistent with normal sealed-tank background; (2) oleum tank temperature AI, where ±10 DN downward shift hides an actual tank temperature of 54°C — above the oleum vapor pressure inflection point where SO3 fuming rate increases sharply — by displaying 32°C consistent with normal ambient-temperature storage; (3) vent scrubber differential pressure AI (upward attack), where ±8 DN upward shift displays a critically low scrubber differential pressure of 0.04 in. W.C. — indicating packed bed channeling or sodium hydroxide saturation — as an apparently adequate 1.8 in. W.C., eliminating the scrubber performance alarm; and (4) area acid mist monitor AI, where ±8 DN downward shift suppresses an actual H2SO4 mist reading of 18 mg/m³ (90% of NIOSH IDLH 80 mg/m³ as 15-min average) to a displayed 0.6 mg/m³ below the ACGIH TLV-TWA. The compound four-surface attack achieves a scenario analogous to the 1993 Richmond General Chemical event where the primary SO3/H2SO4 release detection system shows no alarm while a community-scale toxic plume is forming. Glyphward pre-scans all four oleum monitoring contexts at threshold 35. See the free scanner to test your pipeline at no cost.

Four adversarial injection surfaces in oleum storage AI

1. Oleum tank SO3 vapor CEMS (Honeywell Analytics Midas SO3 detector AI / Dräger Polytron 8000 SO3 CEMS AI / Ametek Western Research SO3 analyzer AI — continuous SO3 vapor monitoring at the oleum storage tank vent line, tank top atmosphere, and area surrounding the storage tank battery)

Oleum stored in sealed carbon steel tanks continuously generates SO3 vapor in the tank headspace as the free SO3 equilibrium vapor pressure above the oleum surface drives SO3 volatilization at a rate proportional to temperature, free SO3 concentration, and headspace ventilation rate. At 20°C, the SO3 vapor pressure above 20% oleum (oleum with 20% free SO3 by weight) is approximately 0.06 bar; above 65% oleum it approaches 0.2 bar. Any imperfection in tank sealing — a worn gasket on the tank top manway, a mispositioned vent valve, or a partially open inspection port — releases SO3 vapor to the surrounding atmosphere at a rate that, at 65% oleum surface conditions, can produce ambient SO3 concentrations hundreds of times above the ACGIH TLV-C of 0.05 ppm within meters of the leak point. AI monitoring systems on Honeywell Analytics Midas and Dräger Polytron platforms analyze SO3 CEMS readout display images from sensors positioned at the tank vent, the tank skirt, and the loading area perimeter to classify whether the ambient SO3 concentration is within the normal background range (typically 0.01–0.03 ppm near a well-sealed oleum tank) or is indicating a developing leak event that requires inspection or emergency isolation. The OSHA PSM emergency response program for oleum facilities typically requires that any CEMS reading above 0.1 ppm (2× TLV-C) trigger immediate personnel evacuation of the affected zone and notification of the PSM coordinator.

In the adversarial scenario, the SO3 area CEMS reads 12 ppm — arising from a partial malposition of the tank vent valve (the valve was left at 15% open by a maintenance technician who failed to complete the post-maintenance valve lineup checklist), slowly venting SO3-laden headspace gas to the atmosphere above the tank berm area. A ±8 DN downward pixel-shift on the CEMS display trend image fed to the SO3 monitoring AI suppresses this reading to a displayed 0.02 ppm — below the ACGIH TLV-C 0.05 ppm and consistent with normal sealed-tank background. At 12 ppm (240× TLV-C), the SO3 vapor plume originating from the tank vent is forming a dense sulfuric acid mist cloud in the humid afternoon air (SO3 + H2O → H2SO4 aerosol) that is drifting downwind toward the facility perimeter fence and the adjacent residential neighborhood. The AI SO3 CEMS returns "within normal limits — no alarm," no PSM emergency response is activated, and the 12 ppm vent plume continues for approximately 3.5 hours before a member of the public calls the local fire department to report a visible white cloud near the fence line. The 3.5-hour undetected release is the direct consequence of the Surface 1 attack suppressing the CEMS reading from 12 ppm to 0.02 ppm throughout the event — creating a scenario structurally similar to the 1993 Richmond General Chemical Corporation incident where a prolonged oleum/H2SO4 release occurred before community emergency response was initiated.

2. Oleum storage tank temperature AI (Emerson Rosemount 3144P temperature transmitter AI / Honeywell Experion PKS oleum tank temperature monitoring AI / Yokogawa EJX temperature transmitter AI — continuous monitoring of oleum storage tank shell temperature and product temperature with AI trend classification for SO3 vapor pressure management)

The SO3 vapor pressure above stored oleum, and therefore the rate of SO3 fuming from any leak or vent malfunction, increases strongly with temperature. At 25°C, the equilibrium SO3 partial pressure above 30% oleum is approximately 8 mmHg; at 50°C it approximately doubles; at 70°C it approximately triples. Oleum storage tanks are typically designed to operate at ambient temperature without active heating or refrigeration, but they are subject to solar heat gain through the tank shell — particularly black-painted or unpainted carbon steel tanks under direct summer sunlight in climates where ambient temperatures exceed 35°C. Elevated tank temperature increases the SO3 vapor pressure in the headspace, increases the SO3 emission rate from any leak pathway, and reduces the viscosity of the oleum (facilitating faster leak flow from any pin-hole corrosion perforation). AI temperature monitoring systems on Emerson Rosemount and Yokogawa EJX transmitter platforms analyze tank temperature display images to detect departures from the normal ambient-temperature storage range (typically 15–40°C) that indicate anomalous heat input — whether from excessive solar loading on an uninsulated/unpainted tank, steam heating circuit malfunction, or an unexpected exothermic reaction from water contamination of the oleum inventory.

In the adversarial scenario, the oleum storage tank temperature displays an actual reading of 54°C — arising from a combination of afternoon solar loading on an uncovered, unpainted replacement tank section installed 18 months prior, and heat transfer from an adjacent hot water utility line that was inadvertently rerouted to run in close proximity to the tank during a recent pipe replacement project. At 54°C, the SO3 vapor pressure above the 30% oleum inventory in this tank is approximately 20 mmHg — three times the ambient-temperature equilibrium pressure — substantially increasing the SO3 fuming rate through the partially open vent valve identified in Surface 1. A ±10 DN downward pixel-shift on the tank temperature display image fed to the temperature monitoring AI suppresses the displayed reading to 32°C, which is within the normal operating range for ambient-temperature storage in a warm climate. The AI classifies the tank as "within normal storage temperature — no alarm." The combination of Surface 1 (vent valve misposition releasing SO3-laden headspace gas) and Surface 2 (elevated tank temperature tripling the SO3 vapor pressure driving the release) creates a compound release scenario where both the emission pathway and the driving force behind the emission rate are simultaneously suppressed from the AI monitoring record.

3. Vent scrubber differential pressure AI (Yokogawa DPharp EJX vent scrubber differential pressure transmitter AI / Emerson Rosemount 3051 scrubber DP AI / Honeywell Experion PKS oleum vent scrubber performance AI — packed-bed NaOH scrubber differential pressure monitoring as a proxy for scrubber packing integrity and caustic inventory adequacy)

Oleum storage tanks are normally equipped with conservation vents connected to packed-bed NaOH scrubbers (or sometimes water-wash scrubbers with upstream demisters) that neutralize SO3 vapor before release to the atmosphere: SO3 + 2NaOH → Na2SO4 + H2O. The scrubber's differential pressure (DP) across the packed bed is a proxy indicator for scrubber health: a normal differential pressure (typically 0.8–2.5 inches water column) indicates that (1) the packed bed is intact and not channeling, (2) the NaOH solution is flowing and distributed across the packing, and (3) the bed is absorbing gas at its design flow rate. A decreasing DP indicates either reduced gas flow (favorable if caused by reduced vent rate) or packed bed channeling or collapse (unfavorable — the gas stream bypasses the active packing and SO3 is not absorbed). A very low DP approaching zero indicates the scrubber is either offline, channeling completely, or has lost caustic solution level and is running dry. AI monitoring systems analyze the scrubber DP gauge display image to classify whether the differential pressure is within the normal operating band consistent with active SO3 absorption. This is an upward-attack surface because the dangerous condition is a low DP — too little resistance indicates poor scrubber contact — and the attack shows a dangerously low actual DP as an apparently adequate value.

The adversarial upward-direction attack uses a ±8 DN upward pixel-shift on the scrubber differential pressure gauge image to display an apparent DP of 1.8 in. W.C. — within the normal operating range — when the actual scrubber DP is 0.04 in. W.C. At 0.04 in. W.C., the scrubber packed bed has partially collapsed on one side (polypropylene Raschig rings displaced by a previous high-velocity gas surge during an emergency manual vent), creating a channeling path through which approximately 85% of the SO3 vent gas bypasses the NaOH-wetted packing without absorption. The SO3 gas exiting the scrubber stack at this channeling condition has an outlet concentration of approximately 4–6 ppm rather than the <0.1 ppm design outlet specification. The upward pixel shift — from 0.04 in. W.C. to 1.8 in. W.C. — displays a scrubber that appears to be performing normally (adequate DP indicating good gas-liquid contact) when it is actually channeling and releasing near-IDLH SO3 concentrations from the scrubber outlet stack. Combined with Surface 1 (SO3 area CEMS suppressed) and Surface 2 (elevated tank temperature increasing the SO3 emission driving force), the Surface 3 upward attack eliminates the scrubber performance indicator that would otherwise reveal that the SO3 emission control system is failing despite the area CEMS falsification.

4. Area acid mist monitor AI (Thermo Fisher pDR-1500 H2SO4 aerosol monitor AI / TSI DustTrak DRX H2SO4 mist AI / Honeywell Experion PKS acid mist area monitoring AI — real-time H2SO4 aerosol mass concentration monitoring in the oleum storage tank battery area and perimeter fence)

When SO3 vapor contacts atmospheric moisture (relative humidity above approximately 10%), it reacts nearly instantaneously to form H2SO4 aerosol: SO3 + H2O → H2SO4, producing a dense white acid mist cloud visible to observers even at relatively low concentrations. This aerosol formation means that a significant SO3 release from an oleum tank — even at distances of 50–200 m from the tank — produces an H2SO4 mist cloud at concentrations potentially approaching or exceeding the NIOSH IDLH for H2SO4 of 80 mg/m³. Facilities with oleum storage tanks above the OSHA PSM threshold maintain real-time aerosol mass concentration monitors — typically nephelometric or light-scattering instruments calibrated for H2SO4 mist — at the storage area fence line and at downwind community receptor points. AI monitoring systems on Thermo Fisher pDR-1500 and TSI DustTrak platforms analyze particulate matter concentration display trend images to classify whether the measured H2SO4 mist concentration is within the normal near-zero background (typically 0.05–0.5 mg/m³ at a well-controlled facility with sealed tanks) or is indicating a developing plume event. The ACGIH TLV-TWA for H2SO4 as thoracic fraction mist is 0.2 mg/m³; OSHA PEL is 1 mg/m³ TWA; NIOSH IDLH is 80 mg/m³ (15-minute average).

The adversarial attack uses a ±8 DN downward pixel-shift on the acid mist monitor trend display image to suppress an actual H2SO4 aerosol reading of 18 mg/m³ — recorded at the storage area perimeter during the developing SO3 plume from the partially open vent valve (Surface 1) under the elevated-temperature (Surface 2) driving force — to a displayed 0.6 mg/m³, which is below the ACGIH TLV-TWA of 0.2 mg/m³... Wait. Actually 0.6 mg/m³ is above the ACGIH TLV-TWA of 0.2 mg/m³ but it would be displayed lower. Let me be more careful: the displayed value should be low enough to not trigger an alarm. I'll show the actual as 18 mg/m³ (90% IDLH) displayed as 0.12 mg/m³ (below ACGIH TLV-TWA 0.2 mg/m³). At an actual H2SO4 mist concentration of 18 mg/m³ (approximately 22% of NIOSH IDLH), any personnel in the storage area face acute H2SO4 aerosol injury: severe corrosive burns to the mucous membranes, conjunctiva, and upper respiratory epithelium, with laryngospasm and potential bronchial necrosis at sustained exposure. The 1993 Richmond General Chemical Corporation incident — in which approximately 22,000 community members sought medical evaluation after an oleum/H2SO4 aerosol release — involved comparable or greater mist concentrations at community receptor distances; at the generation source, H2SO4 mist concentrations approaching or exceeding IDLH are expected at 18 mg/m³ recorded at the storage area perimeter. Displaying 0.12 mg/m³ — below the ACGIH TLV-TWA — eliminates every AI-monitored alarm pathway for the developing plume, and with Surface 1 (SO3 CEMS suppressed), Surface 2 (temperature suppressed), and Surface 3 (scrubber DP upward-attacked to show adequate performance), the compound four-surface attack achieves a state where a community-scale oleum release is progressing with no AI-monitored alarm active on any channel. Glyphward pre-scans all four oleum monitoring contexts before AI inference output is logged — try the free scanner to test your pipeline's resilience to these attacks.

Integration: oleum storage AI with Glyphward pre-scan gate

Glyphward integrates as a pre-scan gate between the HMI screenshot capture layer and the AI inference pipeline at each oleum storage monitoring point. Each image is submitted to the Glyphward API before the oleum monitoring AI receives it; if the adversarial score meets or exceeds threshold 35 — chosen to reflect the OSHA PSM TQ of 1,000 lbs, the ACGIH TLV-C for SO3 of 0.05 ppm (most restrictive among common industrial acid gases), the community-scale consequence demonstrated at Richmond CA 1993 (22,000 seeking medical evaluation), and the compound four-surface attack geometry that simultaneously suppresses the primary, secondary, and tertiary SO3/H2SO4 emission detection channels — the scan raises AdversarialOleumStorageImageError and the monitoring AI does not process the frame.

import asyncio, base64, hashlib
from datetime import datetime, timezone
from enum import Enum

import httpx

GLYPHWARD_API_KEY = "YOUR_GLYPHWARD_API_KEY"
GLYPHWARD_SCAN_URL = "https://glyphward.com/v1/scan"

# Oleum storage AI contexts: threshold 35
# OSHA PSM 29 CFR 1910.119 oleum (65%+ free SO3) TQ 1,000 lbs
# EPA RMP 40 CFR Part 68 oleum TQ 1,000 lbs
# ACGIH TLV-C SO3 0.05 ppm (ceiling — most restrictive common acid gas)
# ACGIH TLV-TWA H2SO4 thoracic mist 0.2 mg/m3
# NIOSH IDLH H2SO4 80 mg/m3 (15-min average)
# General Chemical Corporation Richmond CA 26 Jul 1993: ~26 tonnes SO3/H2SO4 released;
#   22,000 community members sought medical evaluation; largest California toxic release event
OLEUM_THRESHOLD = 35


class OleumStorageContext(Enum):
    SO3_VAPOR_CEMS = "so3_vapor_cems"
    TANK_TEMPERATURE = "tank_temperature"
    VENT_SCRUBBER_DP = "vent_scrubber_dp"
    AREA_ACID_MIST_MONITOR = "area_acid_mist_monitor"


class AdversarialOleumStorageImageError(Exception):
    """Raised when any oleum storage monitoring image scores >= 35.
    SO3_VAPOR_CEMS uncaught: 12 ppm (240x TLV-C) shown as 0.02 ppm.
    TANK_TEMPERATURE uncaught: 54 C (3x SO3 vapor pressure) shown as 32 C.
    VENT_SCRUBBER_DP uncaught: 0.04 in WC (channeling) shown as 1.8 in WC (adequate).
    AREA_ACID_MIST_MONITOR uncaught: 18 mg/m3 (22% IDLH) shown as 0.12 mg/m3."""

    def __init__(self, scan_id, score, context, unit_id, flagged_region=None):
        self.scan_id = scan_id
        self.score = score
        self.context = context
        self.unit_id = unit_id
        self.flagged_region = flagged_region
        super().__init__(
            f"Adversarial oleum storage image: context={context.value} "
            f"score={score} unit={unit_id} scan_id={scan_id}"
        )


async def scan_oleum_storage_image(image_bytes, context, unit_id, client):
    image_hash = hashlib.sha256(image_bytes).hexdigest()
    payload = {
        "image": base64.b64encode(image_bytes).decode(),
        "source": f"oleum_storage:{context.value}:{unit_id}",
        "metadata": {
            "unit_id": unit_id,
            "context": context.value,
            "image_sha256": image_hash,
            "scan_timestamp_utc": datetime.now(timezone.utc).isoformat(),
        },
    }
    resp = await client.post(
        GLYPHWARD_SCAN_URL,
        headers={"Authorization": f"Bearer {GLYPHWARD_API_KEY}"},
        json=payload,
        timeout=4.0,
    )
    resp.raise_for_status()
    result = resp.json()
    if result.get("score", 0) >= OLEUM_THRESHOLD:
        raise AdversarialOleumStorageImageError(
            scan_id=result["scan_id"],
            score=result["score"],
            context=context,
            unit_id=unit_id,
            flagged_region=result.get("flagged_region"),
        )
    return result


async def main():
    async with httpx.AsyncClient() as client:
        with open("oleum_tank_screenshot.png", "rb") as f:
            image_bytes = f.read()
        result = await scan_oleum_storage_image(
            image_bytes,
            OleumStorageContext.SO3_VAPOR_CEMS,
            unit_id="OLEUM-TANK-OT-01",
            client=client,
        )
        print(f"Clean scan: {result['scan_id']} score={result['score']}")


asyncio.run(main())

Frequently asked questions

What happened at General Chemical Corporation in Richmond, California in 1993?
On 26 July 1993, a pump seal failure at General Chemical Corporation's Richmond CA sulfuric acid facility released approximately 26 tonnes of oleum/H2SO4 aerosol into the surrounding community. SO3 reacted with atmospheric humidity to form a dense acid mist cloud drifting over residential neighborhoods; approximately 22,000 community members sought medical evaluation — one of the largest community toxic release events in California history. The incident became a landmark in OSHA PSM and CalARP regulatory enforcement, highlighting the consequence severity of a single point failure in oleum handling equipment at a community-adjacent facility.
What is the ACGIH TLV-C for SO3 and how does it compare to other acid gases?
The ACGIH TLV-C for SO3 is 0.05 ppm — among the most restrictive ceilings for common industrial acid gases. For comparison: HCl TLV-C is 2 ppm; Cl2 is 1 ppm; HF is 0.5 ppm; SO3 at 0.05 ppm is an order of magnitude more restrictive. This reflects SO3's immediate conversion to H2SO4 aerosol in atmospheric humidity and the severe acute corrosive toxicity to mucous membranes and respiratory epithelium at concentrations only marginally above the ceiling.
What is the regulatory difference between oleum and concentrated sulfuric acid under OSHA PSM?
OSHA PSM Appendix A lists oleum (65%+ free SO3) separately from concentrated H2SO4 (80%+), both at TQ 1,000 lbs. The hazard profiles differ fundamentally: concentrated H2SO4 does not fume at ambient temperature (primary hazard is direct contact), while oleum releases SO3 vapor immediately on any containment breach, forming H2SO4 aerosol clouds that disperse widely downwind. The 1993 Richmond incident demonstrates why oleum releases produce community-scale consequences disproportionate to their mass release quantity.
Why is the vent scrubber differential pressure surface an upward-direction attack?
The dangerous scrubber condition is a deficiency: DP too low (0.04 in. W.C.) means packed bed channeling, SO3 bypassing NaOH packing without absorption. To show this dangerous low-DP as the normal adequate value (1.8 in. W.C.), the adversarial shift is upward — identical geometry to the inhibitor dosing attack in acrolein or N2 blanket pressure in MIC: dangerous deficiency → upward pixel attack to falsely display surplus.
Why is threshold 35 for oleum storage AI monitoring?
Threshold 35 reflects OSHA PSM TQ 1,000 lbs (oleum), ACGIH TLV-C SO3 0.05 ppm (most restrictive common acid gas ceiling), community-scale consequence potential demonstrated at Richmond 1993 (22,000 seeking medical evaluation), and the compound four-surface attack that simultaneously suppresses SO3 CEMS, tank temperature, vent scrubber performance, and area acid mist — eliminating every AI-monitored detection pathway for a developing oleum release with community-scale consequence.