Back to skill

Security audit

well-water-test-decoder

Security checks for vulnerabilities and agentic risk

Overview

This local water-report helper requests no sensitive access, but its abbreviated treatment advice needs professional confirmation.

Use this to understand reports and compare quotes. Verify units, sampling instructions, thresholds, and treatment choices with an accredited lab or local health department. Its DIY disinfection shorthand is incomplete: follow professional precautions and use a safe alternative water source until testing confirms safety, consistent with [CDC guidance](https://www.cdc.gov/water-emergency/about/how-to-disinfect-wells-after-an-emergency.html). This review does not validate every health recommendation.

Vulnerability Patterns
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Output HandlingUnvalidated Output Injection, Cross-Context Output, Unbounded Output
  • Behavioral ASTexec() Call, eval() Call, Dynamic Import
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (23)

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · README.md (reported line 18)May include surrounding context.

Well owners get lab numbers with no interpretation — or a "free test" from a company that profits from the answer. This decoder turns a $30–150 county lab report into an action plan: what's a health action (coliform, nitrate near infants, arsenic), what's merely aesthetic (hardness is not a health problem), what test to order next, and what each treatment class honestly costs installed — so a quote can be checked in 5 minutes instead of trusted on faith.

Quick start

bash
python3 scripts/wellwater.py decode --hardness 142 --iron 3.2 --manganese 0.4 \
    --ph 6.4 --nitrate 4.1 --tds 380 --coliform absent --arsenic 3
python3 scripts/wellwater.py symptoms --stains blue-green --corrosion pipes
python3 scripts/wellwater.py panel --context new-property
python3 scripts/wellwater.py treat --hardness 142 --iron 3.2 --ph 6.4

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · SKILL.md (reported line 22)May include surrounding context.

When to Use

  • Lab report back; numbers in mg/L or ppm; no idea what's actionable
  • Symptoms: stains (blue-green, brown, black), rotten-egg smell, metallic taste, scale, recurring gastro illness
  • Buying/building on a property with a well (test BEFORE closing — it's a negotiation item)
  • A treatment salesman's proposal to sanity-check
  • Annual/5-year retest scheduling (coliform annually; nitrate + arsenic every 3–5 yr; full panel at sale or after flood/work on the well)

Don't use for: municipal water reports (CCR — different standards, utility-owned), wastewater, or pools. Coliform-positive: this skill interprets and routes to shock-chlorination/pro-lab; it does not replace county health dept guidance.

Quick Start

bash

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · SKILL.md (reported line 30)May include surrounding context.

Quick Start

bash
# Decode every parameter on a lab report
python3 scripts/wellwater.py decode --hardness 142 --iron 3.2 --manganese 0.4 \
    --ph 6.4 --nitrate 4.1 --tds 380 --coliform absent --arsenic 3

# Symptom-first: what should I test for?
python3 scripts/wellwater.py symptoms --stains blue-green --corrosion pipes

# Treatment sanity-check: sales quote for softener + RO under sink

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · SKILL.md (reported line 97)May include surrounding context.

  • Symptoms cross-checked (stain color → parameter) BEFORE treatment decisions
  • Bacteria: absent, or well defect fixed + shock-chlorinated + retested clean
  • pH ≥ 6.5 before any softener/iron equipment decision
  • Treatment classes sequenced (bacteria → pH → iron → hardness → POE/POU), not bundled by sales script
  • Whole-house RO justified only by whole-house parameters (extreme TDS/sodium/sulfate)
  • Annual coliform + nitrate scheduled; arsenic/lead every 3–5 yr or after well work
  • Quotes cross-checked against the price bands in this skill

Example Session

text
$ python3 scripts/wellwater.py decode --hardness 142 --iron 3.2 --manganese 0.4 \

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · SKILL.md (reported line 103)May include surrounding context.

  • Quotes cross-checked against the price bands in this skill

Example Session

text
$ python3 scripts/wellwater.py decode --hardness 142 --iron 3.2 --manganese 0.4 \
    --ph 6.4 --nitrate 4.1 --tds 380 --coliform absent --arsenic 3
DECODING WELL WATER REPORT
  coliform ABSENT — good. Recheck annually.
  iron 3.2 mg/L — 11x SECONDARY LIMIT: red-brown stains, metallic taste.
    >3 ppm: oxidizing filter, NOT softener-only (resin fouls).
  manganese 0.4 mg/L — OVER HEALTH LIMIT (0.12): black stains AND

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · references/water-standards-and-treatment.md (reported line 4)May include surrounding context.

md
# Well Water — Standards, Sampling & Treatment Reference

## 1. Who is responsible (the core fact)
Private wells are **not regulated under the Safe Drinking Water Act**. No utility tests your water; EPA standards are your benchmark but enforcement is you. Testing cadence: coliform + nitrate **annually** (spring, after snowmelt, is most revealing); arsenic/lead/Mn every 3–5 yr; full panel at property transfer, after flooding, well repairs, or nearby construction/drilling.

## 2. Health standards (EPA MCL / action levels)
| Parameter | Limit | Health meaning | Source patterns |
|---|---|---|---|
| E. coli | 0 | fecal contamination — acute GI illness | septic proximity, well defect, livestock |

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · references/water-standards-and-treatment.md (reported line 53)May include surrounding context.

md
terilizer | bacteria (continuous) | $800–1,500 | needs clear water (turbidity shields microbes); pre-filter |
| Neutralizer (calcite/soda-ash) | raises pH | $800–1,800 | must precede softener/iron units |
| Oxidizing filter (air/greensand) | Fe, Mn, H₂S | $900–2,200 | the correct class for Fe >3 ppm |
| Chlorination + retention + filter | Fe>10, Fe bacteria, H₂S, bacteria | $1,500–3,500 | heavy-duty wells |
| Softener (ion exchange) | hardness; Fe ≤3 incidental | $600–1,500 | size to grain load; resin fouls on high Fe/Mn |
| Anion exchange | nitrate, arsenic(V) | $1,200–2,500 | selective resin; verify with post-test |
| POU RO (undersink) | As, nitrate, lead, TDS, sodium at one tap | $200–600 | the honest drinking-water fix; 3:1 waste, check certification |
| Whole-house RO | everything, everywhere | $4,000–15,000 | only for extreme whole-house TDS/sodium/sulfate |

## 7. The oversell playbook (how treatment sales work)
1. Free test = strips with low resolution; everything reads "bad."

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · references/water-standards-and-treatment.md (reported line 66)May include surrounding context.

md
4. Pressure: "special price today only."
Defenses: accredited lab first; decode against MCL/secondary yourself; sequence per §6 order (bacteria → pH → iron → hardness); get itemized quotes in the right classes; POU RO for drinking-water-only parameters; second opinion on any >$2,000 proposal.

## 8. Retest & maintenance calendar
- Annually (spring): coliform + nitrate.
- Every 3–5 yr: arsenic, lead (first-draw), Mn, uranium if regional.
- After: floods, pump replacement, casing work, new nearby drilling/construction, or any change in taste/odor/color.
- Equipment: softener salt monthly check; neutralizer calcite top-up 6–12 mo; oxidizing media 3–7 yr; RO membrane 2–3 yr; UV lamp annually (even if still lit — intensity fades).
- Keep a water log: date, parameter, value, lab — trends beat snapshots, and a clean log is gold at property sale.

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · scripts/wellwater.py (reported line 10)May include surrounding context.

python
import argparse

# name: (health limit or None, unit, secondary limit or None)
PARAMS = {
    "nitrate":   (10.0, "mg/L", None),
    "arsenic":   (10.0, "µg/L", None),
    "lead":      (15.0, "µg/L", None),
    "iron":      (None, "mg/L", 0.3),
    "manganese": (0.12, "mg/L", 0.05),
    "hardness":  (None, "mg/L", 120.0),
    "ph":        (None, "pH", None),

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · scripts/wellwater.py (reported line 49)May include surrounding context.

python
"high CO2)", "pH + alkalinity + Langelier index"),
}

PANELS = {
    "new-property": ("Full panel + bacteria: coliform/E.coli, nitrate, "
                     "arsenic, lead, iron, manganese, hardness, pH, TDS, "
                     "sulfate, chloride, sodium. $80-150 at state/county "
                     "labs. REQUIRED before closing — results are a "
                     "negotiation item."),
    "annual": ("Coliform + nitrate + (arsenic if ever detected). $30-60. "
               "Coliform is the annual heartbeat test."),

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · scripts/wellwater.py (reported line 78)May include surrounding context.

python
"oxidizer": ("air-injection/greensand oxidizing filter (Fe+Mn)", 900, 2200,
                 "iron >3 ppm or manganese >0.3, or Fe+Mn together"),
    "softener": ("ion-exchange softener sized to grain load", 600, 1500,
                 "hardness >120 mg/L (and iron <=3 ppm only)"),
    "pou-ro": ("point-of-use RO at drinking taps", 200, 600,
               "arsenic/nitrate/lead/TDS at the DRINKING tap only"),
    "poe-ro": ("whole-house RO", 4000, 15000,
               "extreme whole-house TDS/sodium/sulfate ONLY"),
}

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · scripts/wellwater.py (reported line 255)May include surrounding context.

python
"(see water-softener-sizer doctrine).")
    if a.nitrate is not None and a.nitrate > 8:
        print(f"  nitrate {a.nitrate} near/at MCL -> POU RO "
              f"{band(*TREATMENTS['pou-ro'][1:3])} at drinking tap; infants: "
              "bottled water until verified.")
    if a.arsenic is not None and a.arsenic > 10:
        print(f"  arsenic {a.arsenic} µg/L > MCL -> POU RO certified for As "
              f"{band(*TREATMENTS['pou-ro'][1:3])}; whole-house media if "
              ">50 µg/L. RETEST to confirm before buying.")
    print("\n  guards: bacteria first, pH second, iron third, hardness last.")
    print("  whole-house RO only for extreme whole-house TDS/sodium/sulfate.")

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · scripts/wellwater.py (reported line 255)May include surrounding context.

python
"(see water-softener-sizer doctrine).")
    if a.nitrate is not None and a.nitrate > 8:
        print(f"  nitrate {a.nitrate} near/at MCL -> POU RO "
              f"{band(*TREATMENTS['pou-ro'][1:3])} at drinking tap; infants: "
              "bottled water until verified.")
    if a.arsenic is not None and a.arsenic > 10:
        print(f"  arsenic {a.arsenic} µg/L > MCL -> POU RO certified for As "
              f"{band(*TREATMENTS['pou-ro'][1:3])}; whole-house media if "
              ">50 µg/L. RETEST to confirm before buying.")
    print("\n  guards: bacteria first, pH second, iron third, hardness last.")
    print("  whole-house RO only for extreme whole-house TDS/sodium/sulfate.")

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · scripts/wellwater.py (reported line 289)May include surrounding context.

python
s = sub.add_parser("panel", help="which lab panel to order")
    s.add_argument("--context", choices=sorted(PANELS), default="annual")
    s.set_defaults(fn=cmd_panel)

    t = sub.add_parser("treat", help="treatment sequencing check")
    for k in ("ph", "iron", "manganese", "hardness", "nitrate", "arsenic"):
        t.add_argument(f"--{k}", type=float, default=None)
    t.set_defaults(fn=cmd_treat)

    a = p.parse_args()
    a.fn(a)

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · SKILL.md (reported line 114)May include surrounding context.

md
children's neuro advisory — oxidizing filter (same unit as iron).
  hardness 142 mg/L — HARD (aesthetic): scale/soap waste. Not a health
    issue. Softener after iron/pH handling.
  pH 6.4 — BELOW RANGE: corrosive; blue-green stains, leaches
    lead/copper. Neutralizer FIRST in train.
  nitrate 4.1 / TDS 380 / arsenic 3 — fine.
TREATMENT SEQUENCE (order matters):
  1) calcite/soda-ash pH neutralizer $800-$1,800
  2) air-injection/greensand oxidizing filter (Fe+Mn) $900-$2,200
  3) ion-exchange softener sized to grain load $600-$1,500
  realistic installed total: $2,300-$5,500

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · scripts/wellwater.py (reported line 53)May include surrounding context.

python
"new-property": ("Full panel + bacteria: coliform/E.coli, nitrate, "
                     "arsenic, lead, iron, manganese, hardness, pH, TDS, "
                     "sulfate, chloride, sodium. $80-150 at state/county "
                     "labs. REQUIRED before closing — results are a "
                     "negotiation item."),
    "annual": ("Coliform + nitrate + (arsenic if ever detected). $30-60. "
               "Coliform is the annual heartbeat test."),
    "symptoms": ("Symptom-driven: see `symptoms` command output for the "
                 "short list; don't pay for the full panel blind."),
    "after-flood": ("Coliform + E.coli + turbidity + any previous hits. "
                    "Shock-chlorinate first, wait 2 weeks, THEN sample; "

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · scripts/wellwater.py (reported line 122)May include surrounding context.

python
if mcl and val > mcl:
            print(f"  {key} {val} {unit} — OVER HEALTH LIMIT ({mcl}):")
            if key == "nitrate":
                print("    infants <6mo: use bottled water NOW; identify")
                print("    source (septic, farm, feedlot within 100 ft?).")
            elif key == "arsenic":
                print("    chronic carcinogen; POU RO at drinking taps,")
                print("    whole-house if >50 µg/L. Retest to confirm.")
            elif key == "lead":
                print("    usually plumbing + corrosive water: fix pH,")
                print("    replace lead service/solder; flush taps before")

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · scripts/wellwater.py (reported line 256)May include surrounding context.

python
if a.nitrate is not None and a.nitrate > 8:
        print(f"  nitrate {a.nitrate} near/at MCL -> POU RO "
              f"{band(*TREATMENTS['pou-ro'][1:3])} at drinking tap; infants: "
              "bottled water until verified.")
    if a.arsenic is not None and a.arsenic > 10:
        print(f"  arsenic {a.arsenic} µg/L > MCL -> POU RO certified for As "
              f"{band(*TREATMENTS['pou-ro'][1:3])}; whole-house media if "
              ">50 µg/L. RETEST to confirm before buying.")
    print("\n  guards: bacteria first, pH second, iron third, hardness last.")
    print("  whole-house RO only for extreme whole-house TDS/sodium/sulfate.")
    print("  get itemized quotes; cross-check against bands above.")

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · scripts/wellwater.py (reported line 256)May include surrounding context.

python
if a.nitrate is not None and a.nitrate > 8:
        print(f"  nitrate {a.nitrate} near/at MCL -> POU RO "
              f"{band(*TREATMENTS['pou-ro'][1:3])} at drinking tap; infants: "
              "bottled water until verified.")
    if a.arsenic is not None and a.arsenic > 10:
        print(f"  arsenic {a.arsenic} µg/L > MCL -> POU RO certified for As "
              f"{band(*TREATMENTS['pou-ro'][1:3])}; whole-house media if "
              ">50 µg/L. RETEST to confirm before buying.")
    print("\n  guards: bacteria first, pH second, iron third, hardness last.")
    print("  whole-house RO only for extreme whole-house TDS/sodium/sulfate.")
    print("  get itemized quotes; cross-check against bands above.")

Harmful Content Injection

Critical
Category
Prompt Injection
Confidence
70% confidence
Finding

This content may contain harmful instructions that could cause physical harm if followed. CRITICAL: Review carefully before use.

Content

Scanner excerpt · references/water-standards-and-treatment.md (reported line 12)May include surrounding context.

md
| Parameter | Limit | Health meaning | Source patterns |
|---|---|---|---|
| E. coli | 0 | fecal contamination — acute GI illness | septic proximity, well defect, livestock |
| Total coliform | 0 | indicator of surface intrusion | cap/casing defects, grading, floods |
| Nitrate (as N) | 10 mg/L | blue-baby syndrome (infants <6 mo) | septic, manure, fertilizer, old shallow wells |
| Arsenic | 10 µg/L | chronic — skin/bladder/lung cancer | New England, upper Midwest, Southwest aquifers |
| Lead | 15 µg/L AL | neuro, children | plumbing + corrosive water (rarely the aquifer) |
| Manganese | 0.12 mg/L (adv.) | neuro development, children | Northeast/Appalachian aquifers |
| Uranium | 30 µg/L | kidney | granite aquifers (New England) |
| Radon | varies (no federal MCL) | lung (inhalation route) | granite aquifers; test air alongside |

DIY shock-chlorination is recommended without warnings about chemical handling or use of the water during disinfection.

Medium
Category
Output Handling
Confidence
93% confidence
Finding

The skill presents shock chlorination as an inexpensive DIY response to bacterial contamination without accompanying chemical-handling or water-use precautions. In a household drinking-water context, this omission could contribute to unsafe chemical mixing, exposure, or premature consumption; the general referral to county guidance and later retesting partially mitigate but do not resolve the risk.

Content

No source excerpt is available for this finding.

Dynamic attribute access via getattr()

Low
Category
Dangerous Code Execution
Confidence
50% confidence
Finding

Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.

Content

Scanner excerpt · scripts/wellwater.py (reported line 102)May include surrounding context.

python
print("  coliform ABSENT — good. Recheck annually.")

    for key, (mcl, unit, secondary) in PARAMS.items():
        val = getattr(a, key, None)
        if val is None:
            continue
        if key == "ph":

Dynamic attribute access via getattr()

Low
Category
Dangerous Code Execution
Confidence
50% confidence
Finding

Dynamic getattr() with a non-literal attribute name can access arbitrary object attributes, potentially bypassing access controls.

Content

Scanner excerpt · scripts/wellwater.py (reported line 194)May include surrounding context.

python
seen = set()
    print("SYMPTOM FINGERPRINT")
    for attr in ("stains", "odor", "taste", "corrosion", "health", "other"):
        val = getattr(a, attr)
        if not val:
            continue
        for s in [v.strip().lower() for v in val.split(",")]: