Skip to main content

0003 — โหนด cTrader CLI เป็น HTTP + JWT ไม่มี SSH/shell

บริบท​

คอนเทนเนอร์ย้อนกลับ/รันเรียกใช้บนโฮสต์ระยะไกล แนวทางที่ชัดเจน — SSH และรัน docker — ให้แอปหลักการดำเนินการโค้ดระยะไกลโดยพลการและข้อมูลประจำตัวระยะยาวบนทุกโหนด นั่นคือรัศมีการระเบิดขนาดใหญ่สำหรับระบบที่เรียกใช้ cBot ที่ไม่น่าเชื่อถือ

การตัดสินใจ​

แต่ละโฮสต์ระยะไกลรันเอเจนต์ HTTP ของ CtraderCliNode ที่เป็นอิสระ โดยไม่มี SSH และไม่มี shell แอปหลักเรียกเอเจนต์ผ่าน HTTP; ทุกคำขอมี JWT ระยะสั้น HS256 (5 นาที iss=app-main / aud=app-node) ที่ลงนามด้วยความลับของโหนดนั้น เอเจนต์:

  • เรียกใช้เฉพาะรูปภาพที่ตรงกับ AllowedImagePrefix (มีขอบเขตเส้นทางเพื่อให้ ghcr.io/spotware ไม่สามารถจับคู่ ghcr.io/spotware-evil/...);
  • execs docker ผ่าน ArgumentList — ไม่เคยเป็นสตริง shell;
  • เป็น stateless การค้นหาคอนเทนเนอร์โดยป้ายกำกับ app.instance;
  • ลงทะเบียนตนเองและหัวใจจะ POST /api/nodes/register; แอปหลักจำแนก CtraderCliNode ตามชื่อ เพื่อให้โหนดมีความสำคัญข้อมูลที่ตัวจักรการเปลี่ยนแปลง

ผลที่ตามมา​

  • โทเคนคำขอที่รั่วไหลหมดอายุในไม่กี่นาที; ไม่มี shell credential ที่ยังคงอยู่เพื่อให้ขโมย
  • ความสามารถของเอเจนต์ได้รับการจำกัด "รันรูปภาพที่อนุญาต" — มันไม่สามารถเปลี่ยนเป็นเชลล์ระยะไกลทั่วไป
  • ตัวตนโหนดตั้งชื่อเป็นพื้นฐาน ดังนั้นการจัดเตรียมโหนดใหม่ด้วย IP ใหม่จึงไม่ทำให้ประวัติของมันเป็นส่วนประกอบที่เก่า