Skip to content

Commit 9fe9d5b

Browse files
MB-61292: Sanitize bucket params in logs...
... to prevent leaking sensitive information Change-Id: I4b0745649b3974fbaaf1ea834b466873b0963dbc Reviewed-on: https://review.couchbase.org/c/ns_server/+/220959 Well-Formed: Build Bot <[email protected]> Tested-by: Timofey Barmin <[email protected]> Reviewed-by: Navdeep S Boparai <[email protected]>
1 parent 0cb7766 commit 9fe9d5b

File tree

2 files changed

+23
-11
lines changed

2 files changed

+23
-11
lines changed

apps/ns_server/src/memcached_bucket_config.erl

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -307,15 +307,18 @@ ensure(Sock, #cfg{type = memcached}) ->
307307
ok.
308308

309309
format_mcd_keys(ActiveDek, Deks) ->
310-
DeksJsonMcd = lists:map(fun format_mcd_key/1, Deks),
310+
format_mcd_keys(ActiveDek, Deks, fun (K) -> K end).
311+
format_mcd_keys(ActiveDek, Deks, Sanitizer) ->
312+
DeksJsonMcd = lists:map(fun (D) -> format_mcd_key(D, Sanitizer) end, Deks),
311313
ActiveKeyMcd = case ActiveDek of
312314
undefined -> ?MCD_DISABLED_ENCRYPTION_KEY_ID;
313315
#{id := ActiveId} -> ActiveId
314316
end,
315317
{[{keys, DeksJsonMcd}, {active, ActiveKeyMcd}]}.
316318

317-
format_mcd_key(#{id := Id, type := 'raw-aes-gcm', info := #{key := KeyFun}}) ->
318-
Encoded = base64:encode(KeyFun()),
319+
format_mcd_key(#{id := Id, type := 'raw-aes-gcm', info := #{key := KeyFun}},
320+
Sanitizer) ->
321+
Encoded = Sanitizer(base64:encode(KeyFun())),
319322
{[{id, Id}, {cipher, <<"AES-256-GCM">>}, {key, Encoded}]}.
320323

321324
get_current_collections_uid(Sock) ->
@@ -385,14 +388,23 @@ start_params(#cfg{config = BucketConfig,
385388
end
386389
end, Params),
387390

388-
EncodedDeks = binary_to_list(ejson:encode(format_mcd_keys(ActiveDek,
389-
Deks))),
390391

391-
DeksConfigString = "encryption=" ++ EncodedDeks,
392+
PrepareCfgString =
393+
fun (Sanitizer) ->
394+
EncodedDeks = ejson:encode(format_mcd_keys(ActiveDek,
395+
Deks, Sanitizer)),
392396

393-
ExtraParams = [P || P <- [StaticConfigString, ExtraConfigString,
394-
DeksConfigString], P =/= ""],
395-
{Engine, string:join(DynamicParams ++ ExtraParams, ";")}.
397+
DeksConfigString = "encryption=" ++ binary_to_list(EncodedDeks),
398+
399+
ExtraParams = [P || P <- [StaticConfigString, ExtraConfigString,
400+
DeksConfigString], P =/= ""],
401+
string:join(DynamicParams ++ ExtraParams, ";")
402+
end,
403+
404+
NoSanitizer = fun (S) -> S end,
405+
Sanitizer = fun (_) -> <<"<sanitized>">> end,
406+
407+
{Engine, PrepareCfgString(NoSanitizer), PrepareCfgString(Sanitizer)}.
396408

397409
get_bucket_config(#cfg{config = BucketConfig}) ->
398410
BucketConfig.

apps/ns_server/src/ns_memcached.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1595,7 +1595,7 @@ do_ensure_bucket(Sock, Bucket, BConf, false) ->
15951595
%% impossible.
15961596
{ok, DS} = cb_crypto:fetch_deks_snapshot({bucketDek, Bucket}),
15971597
{ActiveDek, Deks} = cb_crypto:get_all_deks(DS),
1598-
{Engine, ConfigString} =
1598+
{Engine, ConfigString, ConfigStringSanitized} =
15991599
memcached_bucket_config:start_params(BConf, ActiveDek, Deks),
16001600

16011601
BucketConfig = memcached_bucket_config:get_bucket_config(BConf),
@@ -1611,7 +1611,7 @@ do_ensure_bucket(Sock, Bucket, BConf, false) ->
16111611
ConfigString, Timeout) of
16121612
ok ->
16131613
?log_info("Created bucket ~p with config string ~p",
1614-
[Bucket, ConfigString]),
1614+
[Bucket, ConfigStringSanitized]),
16151615
ok = mc_client_binary:select_bucket(Sock, Bucket);
16161616
Error ->
16171617
{error, {bucket_create_error, Error}}

0 commit comments

Comments
 (0)