Microsoft Infopath’ta Yükleri Gömerek ve Denetimleri Atlarak Verimliliği Artırın

Microsoft Infopath: Güvenlik Kontrollerini Atlayarak Yüklemeler Gömmek

Kendi imzalı sertifika uyarısı

Son zamanlarda bir SharePoint örneğine göz atarken, formda ilginç bir URL ile karşılaştım https:///_layouts/FormServer.aspx?XsnLocation=https:///resource/Forms/template.xsn. Sayfanın kendisi, verileri SharePoint’e gönderen bir web formu görüntüledi. İlgisini çekti .xsn uzantısı, dosyayı indirdim ve Microsoft Infopath’ın şablon formatı olanı araştırmaya başladım. Yol boyunca, spesifikasyonun uzaktan yüklerin yüklenmesini, uyarı diyaloglarını atlamayı ve diğer ilginç davranışları etkinleştiren kısımları keşfettim.

Yönetilen Kod Uyarı

Muhtemelen bir süredir Infopath’tan haber almadınız – en son Microsoft Office 2013’te bir araya geldi, ancak Office 365 aboneleri için mevcut olmaya devam ediyor ve ayrıca bir hizmet olarak SharePoint’e gömüldü. O zamandan beri PowerApps lehine kullanımdan kaldırıldı, ancak Microsoft’un ünlü geriye dönük uyumluluğu sayesinde, 2026 yılına kadar genişletilmiş desteğin tadını çıkarmaya devam ediyor. Kısacası, özellikle büyük kurumsal ortamlarda Infopath’ın ortaya çıkmaya devam etmesini bekleyin.

Yayın Konumu Hatası Değiştirildi

InfoPath, kullanıcıların her iki tasarıma da izin verir (.xsn dosyaları) ve doldurma formları. Ayrıca, Wikipedia’ya göre, Infopath çok çeşitli etkileşimi destekler:
– Etkinlik işleyicileri için kurallar
– Veri doğrulaması
– Koşullu biçimlendirme
– Activex kontrolleri
– XPath ifadeleri ve işlevleri
– SQL, Microsoft Access ve SharePoint gibi harici veri kaynakları
– JScript, VBScript, Visual Basic, C#ve diğer diller
– Özel HTML Görev Panoları
– SharePoint Entegrasyonu
– Kullanıcı rolleri

Özel Görev Belgesi Seçenekleri

Tüm bu işlevsellik, saklanmak ve sömürmek için bir tavşan delikleri yaratır, ancak Infopath oldukça sağlam bir üç katmanlı güvenlik seviyesi modeli uygular: kısıtlı, alan ve tam güven. Her seviye değişen izin derecelerine sahiptir, kısıtlı formlar herhangi bir yönetilen kodu (C#, VBA) yürütemezken, Full Trust herhangi bir kodu yürütebilir. Bu arada, etki alanı seviyesi formları, bu form için tanımlanmış bir yayın alanı (örneğin belirli bir SharePoint URL’sinde yayınlanan bir form) ve Microsoft Internet Explorer tarafından tanımlanan güvenlik bölgeleriyle sınırlıdır.

Özel Görev Panosu Uzaktan

Ayrıca, P/Invoke ve yükleme gibi tipik geçici çözümler, yönetilmeyen kodun engellenmesi; Tehlikeli ActiveX kontrolleri ve yönetilen kod düzenekleri AllowPartiallyTrustedCallersAttribute tamamen güvenilir formlar gerektirir veya hiç yüklenemez. Bu, kırmızı ekipler için sorunludur, çünkü tam güven formlarının imzalanması ve bir uyarı istemi oluşturması gerekir. Obsport Labs’ın Infopath Kimlik avı makalesi bunu atlamadı ve bunun yerine kendi kendine imzalanmış sertifikanın yazar adını taklit etmeye dayanıyordu.

Uzaktan Bağlantı Uyarısı

Ancak, güvenlik modeline baypas bulmakla daha fazla ilgileniyordum.

Keşfettiğim ilginç bir bypass, Yönetilen Kod Uyarı iletişim kutusuyla ilgiliydi. Bir form yönetilen kodu (C#, VBA) içerdiğinde, aşağıdaki diyalog açılır ve kodu yürütmeden önce kabul edilmelidir:

Etki alanı seviyesi formları, Tehlikeli Montajlar olmadan yönetilen kodu gerçekleştirebilir System.Diagnostics.Process ancak yine de kullanıcı adı ve bilgisayar adı gibi bilgileri sızdırabilir. Microsoft.Office.InfoPath.LoginName mülk. Bu nedenle, sinir bozucu diyalogu tetiklemeden bunu yapmak güzel olurdu. Bunu yapmak için, yapısına dalmak gerekir. .xsn formatları.

Diğer Microsoft Office formatlarından farklı olarak .docx esasen XML tezahürleri ve kaynakları içeren fermuar dosyaları, .xsn Dosyalar kabin sıkıştırılmış dosyalardır. Kabin aşağıdakilere alınır:

1. manifest.xsf: Formu açıklayan açık dosya.
2. myschema.xsd: Veri Kaynakları ve Alan Şeması
3. template.xml: Form şablon örneği
4. sampledata.xml: Form verilerinin örneği
5. Kaynak Dosyaları: Formda yer alan diğer kaynak dosyaları

Forma yönetilen kod eklendiğinde, manifest.xsf derlenen DLL’yi bir rootAssembly Dosya Türü:

Form_Calc.dll taksiye gibi paketlenir.

Manifest ayrıca, yönetilen kodun formda varlığını açıkça beyan eder:

Extension SolutionDefinitionExtensions
– runtimeCompatibility= “client server” allowClientOnlyCode= “no”
Offline openIfQueryFails= “yes” cacheQueries= “yes”
Managedcode projectPath= “C:UsersIEUserDocumentsInfoPath ProjectsForm-Calc1Form-Calc.csproj” language= “CSharp” version= “15.0” enabled= “yes”
Server formLocale= “en-US” isPreSubmitPostBackEnabled= “no” isMobileEnabled= “no”

İlginç bir şekilde, enabled Mülkiyet xsf2:managedCode düğüm no Kod artık uyarı iletişim kutusunu tıklamak zorunda kalmadan yürütülüyor! Bunun bir iş mantığı hatası mı yoksa gecikmiş bir açılır pencere olup olmadığından emin değilim …

Etki alanı düzeyinde form şablonları oluştururken, InfoPath publishUrl Manifest’teki mülk:

xdocumentclass solutionFormatVersion= “15.0.0.0” solutionVersion= “1.0.0.3” productVersion= “15.0.0” requireFullTrust= “yes” publishUrl= “C:UsersIEUserDesktopForm-Calc.xsn” name= “urn:schemas-microsoft-com:office:infopath:Form-Calc:-myXSD-2022-05-25T14-32-18” …

Bu, formu şu adreste belirtilen konumla sınırlayan etki alanı güvenlik kontrolünün bir parçası olarak kullanılır. publishUrl. Örneğin, belirtilen konumun dışında bir etki alanı seviyesi formu açılırsa, aşağıdaki hata oluşacaktır.

Belirli form sınıfları için (örneğin yönetilen kod olmadan ancak JScript gibi dahil edilen komut dosyalarıyla), tümü kaldırır. publishUrl Manifest’teki özellik, alan düzeyindeki formların bu hatayı tetiklemeden hala açılmasını sağlar. Bu, düşük ayrıcalıklı kısıtlı formlara geri dönmeden daha yüksek ayrıcalıklı alan seviyesi formları sunmayı kolaylaştırır.

Infopath dolgu modu formlarının gerçekten ilginç bir özelliği (yani SharePoint veya Web’e yayınlanmak yerine masaüstlerinde doldurulması amaçlananlar) özel görev panellerine destektir. Bunlar, görünüşte özel HTML dosyaları, kullanıcıların InfoPath’ta formla otomatik olarak açılan bir yan panele yerleştirebileceği. Hem uzaktan hem de gömülü URL’ler kullanılabilir. Örneğin, görev bölmesi konumunu https://evil.com olarak ayarlamak:

Siteyi dolgu görünümünde olduğu gibi görüntüleyecek.

Ancak, uzak URL’ler için bu da uzak bir bağlantı uyarısını tetikler.

Bunun yerine gömülü bir kaynak dosyası referans verilerek bu kolayca önlenebilir.

İlginç bir şekilde, GUI ve belgeler sadece gömmene izin verse de .html dosyalar, doğrudan düzenleyebilirim href değeri xsf:taskpane HTML olmayan dosyalara referans için manifestte düğüm! Özel URI’ler de desteklendi.

taskpane caption= “test” href= “calc.exe”

Görev panosu Internet Explorer Engine (RIP) ‘de açıldığından da çalıştırabilirim .hta ve jscript ve yürütülebilir ürünler. Varsayılan olmayan IE dosyaları için, bu tipik bir çalışma/kaydet iletişim kutusu olacaktır. Bu, Windows 11’de bile çalışır, çünkü TaskPane tarayıcının kendisi yerine Internet Explorer motorunu kullanır, bu da hala bu tür uyumluluk senaryoları için korunur. İnternet Explorer gün batımına girerken, bu, JScript motorundaki veya benzeri kırpma olasılığını arttırır. Bu nedenle, yürütülebilir yük yükleri sunmak için uygun bir yol olarak hizmet etmek dışında, tıklamasız bir istismar sunma potansiyeli vardır.

Özel URL ve HTML dosyalarını gömme ile ilgili tüm bu konuşmalarla, ms-msdt Burada özel URI/Folina güvenlik açığı kullanılabilir. Ne yazık ki, test ettiğimde, artık işe yaramadı – belki de Infopath aynı özel URI beyaz listesinde pişirmediği için ms-msdt Word gibi diğer ofis uygulamaları olarak. Bununla birlikte, özel görev panellerini kullanarak özel URI’ler ve HTML dosyalarını yerleştirme yeteneği göz önüne alındığında kapı benzer saldırılar için açık kalır.

Infopath ile denemeler, yükler sunmak veya kod yürütmek için sömürebileceğim birkaç yol ortaya çıkardı. Üç katmanlı güvenlik modeli saf saldırılara direnirken, ilginç davranışı tetiklemek için manifestayı doğrudan değiştirmenin yollarını buldum. OLES ve geriye dönük uyumluluklar gibi gömülü kaynakların Microsoft Office ürünlerini rahatsız etmeye nasıl devam ettiği göz önüne alındığında, zombi hatalarını ve gadget’ları keşfetmek için görünüşte küçümsenmiş ürünleri denemenin yararlı olduğunu düşünüyorum.

Kaynak: [Source link](https://spaceraccoon.dev/embedding-payloads-bypassing-controls-microsoft-infopath/)