Gh Actions - Context Script Injections
Temel Bilgiler
Dikkat edin, bazı github bağlamları değerleri, PR oluşturan kullanıcı tarafından kontrol edilir. Eğer github eylemi bu verileri yürütmek için kullanıyorsa, bu keyfi kod yürütmeye yol açabilir. Bu bağlamlar genellikle body
, default_branch
, email
, head_ref
, label
, message
, name
, page_name
,ref
ve title
ile biter. Örneğin (bu yazıdan alınan liste):
github.event.comment.body
github.event.issue.body
github.event.issue.title
github.head_ref
github.pull_request.*
github.*.*.authors.name
github.*.*.authors.email
Dikkat edin, burada daha az açık kaynaklar da vardır, örneğin dal adları ve e-posta adresleri, izin verilen içerik açısından oldukça esnek olabilir. Örneğin, zzz";echo${IFS}"hello";#
geçerli bir dal adı olabilir ve hedef bir depo için olası bir saldırı vektörü olabilir.
Betik enjeksiyon saldırısının bir örneği
Bir betik enjeksiyon saldırısı, bir iş akışının içinde doğrudan gerçekleşebilir. Aşağıdaki örnekte, bir eylem, bir pull request başlığının geçerliliğini test etmek için bir ifade kullanır, ancak aynı zamanda betik enjeksiyonu riskini de ekler:
Shell script çalıştırılmadan önce ${{ }}
içindeki ifadeler değerlendirilir ve ardından elde edilen değerlerle değiştirilir, bu da onu komut enjeksiyonuna karşı savunmasız hale getirebilir.
Komut enjeksiyonu yapmak için saldırgan, başlığı a"; ls $GITHUB_WORKSPACE"
olan bir pull isteği oluşturabilir.
Bu örnekte, "
karakteri, title=
"${{ github.event.pull_request.title }}"
ifadesini kesintiye uğratmak için kullanılır ve böylece ls
komutu çalıştırılabilir hale gelir.
Last updated