0003 — cTrader CLI чворови су HTTP + JWT, без SSH/shell-а
Контекст
Контејнери за тестирање/покретање се извршавају на удаљеним домаћинима. Очигледни приступ — SSH и покрени docker — даје главној апликацији произвољно удаљено извршавање кода и дугорочне креденцијале на сваком чвору. То је велик полупречник взрива за систем који покреће неповерљиве cBots корисника.
Одлука
Сваки удаљени домаћин покреће독ов HTTP агента CtraderCliNode без SSH-а и без shell-а.
Главна апликација позива агента преко HTTP-а; сваки захтев носи краткотрајни HS256 JWT (5-минутни,
iss=app-main / aud=app-node) потписан тајном тог чвора. Агент:
- само покреће слике које се подударају са
AllowedImagePrefix(са границом пута даghcr.io/spotwareне може се подударити саghcr.io/spotware-evil/...); - извршава docker преко
ArgumentList— никад не користи shell string; - је без стања, налазећи контејнере по ознаци
app.instance; - самостално се региструје и упаљава
POST /api/nodes/register; главна апликација ажурираCtraderCliNodeпо имену, тако да чвор прелази IP промене.
Последице
- Процурени захтев токена истиче за минуте; нема трајне shell креденцијале која может бити украдена.
- Способност агента је ограничена на "покрени дозвољену слику" — не може бити претворена у опште удаљени shell.
- Идентитет чвора је заснован на имену, тако да поновна подешавања чвора са новом IP не оставља сирочад историју.