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
{{ message }}
Repository navigation
Commit 5055ded
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: PYEGERIA_ISSUES.md
+37Lines changed: 37 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1188,6 +1188,43 @@ lacks `deleteMethod`, `permittedSynchronization`, `connectionName` and
1188
1188
`metadataCollectionQualifiedName`, which the Java relationship accepts.
1189
1189
1190
1190
1191
+
---
1192
+
1193
+
### ISSUE-121: `core/mcp_adapter.py` writes the caller's user name and plaintext password to stderr and the log on every report call
1194
+
1195
+
**Layer:** pyegeria (credential leak in diagnostics) · **Status:** open,
1196
+
logged only, not fixed (per the gaps-tracking rule, awaiting explicit
1197
+
approval) · **Found:** 2026-10-03, read-only security sweep by the Resource
1198
+
Explorer coordinator session; no value was read or recorded.
1199
+
1200
+
**What:** the report-execution entry point in `pyegeria/core/mcp_adapter.py`
1201
+
(the function whose docstring covers the `token` / `user` / `user_pass`
1202
+
fallback, around lines 170-180) builds a "Format set" diagnostic string that
1203
+
includes `user` and `user_pass`, then emits it twice: once with
1204
+
`print(..., file=sys.stderr)` and once with `logger.info(...)`. Both run
1205
+
before the settings fallback, so whatever the caller passed, and for the
1206
+
fallback path the configured profile, is written in clear text on every call.
1207
+
The log sink is loguru, so the password also lands in any rotated debug-log
1208
+
file (this repo's untracked `debug_log.*.zip` archives are the kind of file
1209
+
that would carry it) and in anything that captures the MCP server's stderr.
1210
+
1211
+
**Severity (owner, 2026-10-03):** low for the current demo/dev systems; it becomes a real problem the moment anyone runs this against a production Egeria with real accounts.
1212
+
1213
+
**Why it matters:** the password reaches files and terminals that are
1214
+
routinely attached to issues, zipped and shared. Rotating the credential
1215
+
does not remove the copies already written.
1216
+
1217
+
**Candidate fix (not applied):** drop `user_pass` from both statements, and
1218
+
never log `token`. Log `user` only if the owner wants it. Rotate any
1219
+
Egeria account whose password was used through this adapter, and treat
1220
+
existing `debug_log.*` archives as containing it. A regression test should
1221
+
capture stderr and the log sink for a call with a sentinel password and
1222
+
assert the sentinel is absent.
1223
+
1224
+
**Related:** the same sweep found two hard-coded database passwords in
1225
+
untracked Airflow DAG files in egeria-workspaces-fs; that is tracked in that
1226
+
repo, not here.
1227
+
1191
1228
---
1192
1229
1193
1230
### ISSUE-114: `get_guid_for_name`'s miss-sentinel string ("No elements found") is truthy and repeatedly fools callers' existence checks — a caller guideline, not a candidate fix here
0 commit comments