Güvenlik ve sınırlar¶
Laneward'ın seni neyden koruduğu, neyden korumadığı ve gerçekte neyin doğrulandığı. Bunu, önemli bir depoya yönlendirmeden önce oku.
Seni şaşırtacak iki şey¶
Hiçbir zaman kimlik doğrulama yok. Hub 127.0.0.1 üzerinde dinler ve bu
adres yapılandırılmış değil, koda gömülüdür (hardcoded). Porta erişebilen
her şey lane kaydedebilir, onayları çözebilir ve her brief'i okuyabilir.
Tek, güvenilir, tek kullanıcılı bir makine için tasarlanmıştır. Onu bir
tünelin arkasına koyup işi bitmiş sayma.
Her lane worktree'si, sürülen deponun .env dosyasının bir
kopyasını alır. Ajan gerçek gizli değerlerini okuyabilir: API
anahtarları, token'lar, içinde ne varsa. Yalnızca DATABASE_URL, o lane
için oluşturulmuş bir veritabanına yeniden yazılır. Maskeleme
uygulanmamıştır, ve bu sistemdeki bilinen en büyük açıktır.
Bu, belirli bir depo için kabul edilemezse, bugünkü dürüst cevap o depoyu Laneward ile sürmemektir.
Ajanın elde etmediği şeyler¶
Conductor, kendi ortamını devretmek yerine ajanın ortamını inşa eder. Şunları kaldırır:
GITHUB_TOKEN,GH_TOKEN,GH_ENTERPRISE_TOKEN,GITHUB_API_TOKENGIT_ASKPASS,SSH_ASKPASS,SSH_AUTH_SOCK,SSH_AGENT_PID,GIT_SSH,GIT_SSH_COMMANDDATABASE_URL, böylece lane kendi.envdosyasından kendi değerini okur- adı
TOKEN,PASSWORD,PASSWD,SECRET,API_KEY,ACCESS_KEY,PRIVATE_KEY,ASKPASSveyaAUTH_SOCKile biten her şey - git'i başka bir depoya yönlendirebilecek her
GIT_DIRailesi değişken
ve global ile system git config'ini /dev/null'a ayarlar (Windows'ta
NUL), GIT_TERMINAL_PROMPT=0 yapar, ve bir kullan-at GH_CONFIG_DIR
verir.
Okunabilir kalan şey, deponun kendi yerel git config'idir, remote URL dahil. Bu bilinen bir açıktır, bir gözden kaçırma değil.
Git sınırı¶
Laneward git'in sahibidir. Ajanın PATH'inin başına önce bir shim
yerleştirir, bu yüzden ajanın yaptığı her git çağrısı ondan geçer.
İzin verilenler: status, diff, log, show, rev-parse, rev-list,
ls-files, ls-tree, cat-file, blame, describe, grep, show-ref,
for-each-ref, merge-base, diff-tree, diff-index, shortlog,
name-rev, artı salt listeleme olarak branch, worktree ve stash, artı
git --version.
Subcommand daha değerlendirilmeden doğrudan reddedilenler: -c,
--config-env, --exec-path, --upload-pack, --receive-pack,
--namespace. Bunların her biri bir okumayı keyfi bir çalıştırmaya
dönüştürebilir.
Bir ret tek bir satır yazdırır ve 86 koduyla çıkar:
ve argümanları ve çağrının bir okumaya benzeyip benzemediğini kaydeden bir
satırı <lane_id>.git-guard.jsonl dosyasına ekler. Çalıştırma sonrasında,
reddedilen bir mutation lane'i başarısız kılar; reddedilen bir okuma
raporlanır ve lane yine de geçer.
Shim, katmanlı savunmanın bir parçasıdır, tek kontrol değil
Sandbox'a alınmış bir ajan genellikle bu çağrıları kendisi reddeder. Shim'in var olma nedeni, bu sandbox'ın bir keresinde bu makinede saatlerce yok olduğunun gözlemlenmiş olmasıdır. Onu ilk hat değil, ikinci hat olarak gör.
Bilinen açıklar, açıkça belirtilmiş¶
- Gizli değerler. Yukarıdaki
.envkopyası. - Kimlik doğrulama yok, yalnızca
127.0.0.1, tasarım gereği tek kullanıcı. - Çoklu conductor çalıştırmak güvensizdir ve hiçbir şey tek bir conductor'ı zorunlu kılmaz. Bir veritabanına karşı çalışan iki conductor aynı lane'ler için çatışır.
- Git açığı. Depoya özel yerel git config'i, remote URL dahil, bir lane worktree'sinin içinden okunabilir.
- Güvenlik açığı bildirim kanalı yok. Bir
SECURITY.mdyoktur ve GitHub seviyesinde sertleştirme (hardening) yapılandırılmamıştır. reset-strandedçalışan her lane'i sıfırlar. Mahsur kalmış bir lane'i sağlıklı olandan ayırt edemez.- Test suite,
DATABASE_URL'in işaret ettiği her şeyi truncate eder. Adı_testile bitmeyen veyalaneward_lane_ile başlamayan her veritabanını reddeder; dikkatsiz bir export ile lane geçmişin arasında duran tek şey budur.
Neyin doğrulandığı, ve neyin doğrulanmadığı¶
Linux. Kurulur, iki systemd user servisi olarak çalışır, kimse izlemezken bir lane'i baştan sona tamamlar, kimse izlemiyorken path ownership'i zorunlu kılar, ve lane'lerini geri teslim ederek temiz bir şekilde durur. Gönderilen veritabanı container'ı kendi Quadlet'inden başlar, migration'ı alır, ve volume'u unit'in yeniden başlatılmasından sağ çıkar. Bu kanıt, host kernel'ini paylaşan ayrıcalıklı (privileged) bir container'dan gelir, bare metal'dan veya bir sanal makineden değil.
Windows. Kurulur, zamanlanmış bir görev olarak çalışır, ve kimse bağlı
değilken gerçek bir ajan tarafından sürülen bir lane'i tamamladı. Görevi
durdurmak lane'i mahsur bırakır, ve reset-stranded onu kurtarır; bu bir
round trip olarak doğrulanmıştır.
Hiçbir platform bir reboot'tan veya bir logout'tan sağ çıkmadı. Windows logon trigger'ı gerçek bir döngüden hiç tetiklenmedi. Gerçek bir ajan Windows görevi altında çalıştı ama systemd altında hiç çalışmadı. Docker, macOS ve diğer servis kurulumları denenmedi.
Kanıt notları, neyin çalıştırıldığını, ne bulduğunu, ve her durumda neyi kanıtlamadığını kaydeder.
Yeşil bir lane'in ne anlama gelip gelmediği¶
completed, ajanın 0 koduyla çıktığı, worktree'sindeki her kirli (dirty)
yolun owned_paths içinde olduğu, ve sürülen deponun bildirdiği
check'lerin geçtiği anlamına gelir. İşin doğru, review edilmiş, commit
edilmiş veya merge edilmiş olduğu anlamına gelmez. Diff'i okumak hâlâ
senin işindir, ve commit ile merge tasarım gereği manuel kalır.