[{"data":1,"prerenderedAt":844},["ShallowReactive",2],{"blog-certighost-cve-2026-54121":3},{"post":4,"upNext":813,"linkedPosts":843},{"id":5,"title":6,"author":7,"body":8,"date":774,"description":775,"draft":776,"extension":777,"faq":778,"image":797,"lang":798,"lastReviewed":799,"link":800,"meta":801,"navigation":802,"path":803,"seo":804,"stem":805,"tags":806,"type":811,"__hash__":812},"content\u002Fblogs\u002F2026-08-25-certighost-cve-2026-54121.md","วิเคราะห์ CVE-2026-54121 - CertiGhost","Suppawej Kerdphol",{"type":9,"value":10,"toc":756},"minimark",[11,31,39,44,111,114,118,121,124,127,140,143,146,150,157,180,187,191,208,214,220,223,226,230,236,245,249,252,256,312,316,338,416,424,427,430,437,483,490,494,497,517,520,528,548,555,573,581,609,612,617,627,642,659,669,672,677,698,701,704,707,711,742,746,749,752],[12,13,14,15,19,20,23,24,27,30],"p",{},"ช่วงปลายเดือนที่ผ่านมาหลายคนในสาย Active Directory security น่าจะได้เห็นชื่อช่องโหว่ตัวใหม่ที่ชื่อว่า ",[16,17,18],"strong",{},"CertiGhost (CVE-2026-54121)"," ผ่านตากันมาบ้างแล้ว จุดที่ทำให้ช่องโหว่นี้น่าสนใจมากคือ ผู้โจมตีที่เป็นเพียง ",[16,21,22],{},"domain user ธรรมดา"," ก็สามารถปลอมตัวเป็น Domain Controller (DC) และขยายผลไปจนถึงการยึดครองทั้ง domain ได้ ผ่านบริการที่หลายองค์กรมีอยู่แล้วอย่าง ",[16,25,26],{},"Active Directory Certificate Services (AD CS)",[28,29],"br",{},"\nช่องโหว่นี้ถูกรายงานไปยัง Microsoft ตั้งแต่เดือนพฤษภาคม 2026 ได้รับการแก้ไขใน security update รอบเดือนกรกฎาคม 2026 (14 ก.ค. 2026) และเปิดเผยรายละเอียดต่อสาธารณะเมื่อวันที่ 24 ก.ค. 2026",[12,32,33,34,38],{},"บทความนี้จะพาไปดูว่าเส้นทางที่เรียกว่า ",[35,36,37],"em",{},"chase"," ทำงานยังไง ทำไมมันถึงถูกนำมา abuse ได้ และ patch ของ Microsoft แก้ตรงไหน",[40,41,43],"h2",{"id":42},"too-long-dont-read-tldr","Too Long; don't read. (TL;DR)",[45,46,47,65,87,105],"ul",{},[48,49,50,53,54,56,57,61,62],"li",{},[16,51,52],{},"ต้นตอของปัญหา:"," ในบางเงื่อนไขของการ enroll certificate ตัว CA จะมี fallback ที่เรียกว่า ",[35,55,37],{}," คือไปดึงข้อมูล identity จากอีก host หนึ่ง โดยดูจาก request attribute ชื่อ ",[58,59,60],"code",{},"cdc"," ปัญหาคือ CA ",[16,63,64],{},"เชื่อค่านี้ที่ผู้ร้องขอกำหนดมาเอง โดยไม่ได้พิสูจน์ก่อนว่า host นั้นเป็น DC จริงหรือเปล่า",[48,66,67,70,71,74,75,78,79,82,83,86],{},[16,68,69],{},"ผลกระทบ:"," ผู้โจมตีสามารถชี้ให้ CA ไปคุยกับเครื่องของตัวเอง แล้วป้อนข้อมูล identity ของ DC (",[58,72,73],{},"objectSid"," + ",[58,76,77],{},"dNSHostName",") กลับไป ทำให้ได้ certificate ที่ยืนยันตัวตน \"เป็น DC\" ออกมา จากนั้นก็ทำ ",[16,80,81],{},"DCSync"," ดึง ",[58,84,85],{},"krbtgt"," และยึด domain ได้",[48,88,89,92,93,96,97,100,101,104],{},[16,90,91],{},"เงื่อนไขที่เจอในการทดสอบ:"," Enterprise CA บน build ก่อน patch กรกฎาคม 2026, ใช้ template ",[58,94,95],{},"Machine"," ค่า default, และค่า ",[58,98,99],{},"ms-DS-MachineAccountQuota"," แบบ default เท่ากับ ",[58,102,103],{},"10"," ก็เพียงพอแล้ว",[48,106,107,110],{},[16,108,109],{},"วิธีแก้:"," ลง security update เดือนกรกฎาคม 2026 (CVE-2026-54121)",[12,112,113],{},"จบสำหรับคนที่ไม่อยากอ่านยาว.. แต่ถ้าใครอยากเข้าใจว่ามันทำงานยังไงจริง ๆ ตามมาได้เลย",[40,115,117],{"id":116},"ทำความรู้จัก-chase-fallback","ทำความรู้จัก \"chase\" fallback",[12,119,120],{},"ก่อนจะไปถึงตัวบั๊ก ขอปูพื้นเรื่องนึงก่อน เพราะถ้าไม่เข้าใจตรงนี้ ที่เหลือจะงงหมด",[12,122,123],{},"ปกติเวลา enroll certificate มันก็จบในสเต็ปเดียว แต่มีบางเคส พวกที่ enroll ข้าม Domain Controller CA จะไปค้น directory เพิ่มอีกรอบ ตัวที่ทำงานรอบสองนี้แหละที่เรียกว่า chase",[12,125,126],{},"chase ถูกคุมด้วย request attribute สองตัว คือ",[45,128,129,134],{},[48,130,131,133],{},[58,132,60],{}," (Client DC) : บอกว่า CA ควรไปติดต่อ host ไหน",[48,135,136,139],{},[58,137,138],{},"rmd"," (Remote Domain) : บอกว่า CA ควรไปค้นหา principal ตัวไหน",[12,141,142],{},"พอสองค่านี้ถูกส่งมา CA ก็เชื่อมไปที่ host ใน cdc ผ่าน SMB กับ LDAP แล้วไปดึง principal ตาม rmd ตรงไปตรงมา ไม่มีอะไรซับซ้อน",[12,144,145],{},"คำถามคือ... แล้ว CA รู้ได้ยังไงว่า host ที่เราบอกให้ไปคุยด้วยเนี่ย มันเป็น DC จริง ๆ",[40,147,149],{"id":148},"ช่องโหว่-certighost","ช่องโหว่ CertiGhost",[12,151,152,153,156],{},"ปัญหาหลักคือ CA ยอมรับ ",[35,154,155],{},"chase target"," ที่ผู้ร้องขอกำหนดมาเอง โดยไม่ได้พิสูจน์ก่อนว่า host นั้นเป็น Domain Controller ตัวจริงตามที่อ้าง พอเป็นแบบนี้ ผู้โจมตีก็แค่:",[158,159,160,167,172],"ol",{},[48,161,162,163,166],{},"รันบริการ ",[16,164,165],{},"LDAP และ LSA ปลอม"," บนเครื่องที่ตัวเองคุม",[48,168,169,170],{},"ชี้ให้ CA วิ่งมาที่เครื่องนั้นผ่าน ",[58,171,60],{},[48,173,174,177,178],{},[16,175,176],{},"ป้อนข้อมูล identity อะไรก็ได้ที่ต้องการ"," กลับไปให้ CA สำหรับ principal ที่ระบุใน ",[58,179,138],{},[12,181,182,183,186],{},"ประเด็นคือ ",[16,184,185],{},"CA เอา response จาก host นั้นมาใช้เป็นข้อมูล directory จริง ๆ"," ในการสร้าง certificate",[40,188,190],{"id":189},"ทำไมถึงขยายผลไปยึด-domain-ได้","ทำไมถึงขยายผลไปยึด Domain ได้",[12,192,193,194,196,197,199,200,203,204,207],{},"ในเชนที่ถูกทดสอบ ผู้โจมตีสามารถส่งค่า ",[58,195,73],{}," และ ",[58,198,77],{}," ",[16,201,202],{},"ของ Domain Controller"," กลับไปให้ CA ค่าทั้งสองนี้จะไปมีอิทธิพลต่อข้อมูล identity ใน certificate ที่ CA ออกให้ รวมถึง ",[16,205,206],{},"strong-mapping SID"," และฟิลด์ DNS identity ที่ใช้ระหว่างการ authenticate",[12,209,210,211],{},"แล้วทำไมเครื่องปลอมของผู้โจมตีถึงผ่านการตรวจของ CA ได้? คำตอบอยู่ที่ ",[16,212,213],{},"machine account",[12,215,216,217,219],{},"machine account ที่ถูกสร้างผ่านค่า default ",[58,218,99],{}," ถือเป็น domain principal",[12,221,222],{},"ด้วยเหตุนี้ endpoint ปลอมของผู้โจมตี (ที่มี LSA\u002FLDAP service คอย relay authentication challenge ของ CA ไปยัง DC จริง) จึงผ่านการตรวจสอบที่จำเป็น ทำให้ CA เดินหน้าออก certificate ต่อ ทั้งที่มันไม่ใช่ DC ที่กำลังถูกปลอมตัวเลย",[12,224,225],{},"ผลลัพธ์คือ CA ออก certificate ที่มี identity เท่ากับ DC เป้าหมายให้เรามาถือครอง",[227,228,229],"h3",{"id":229},"ภาพรวมขั้นตอนการโจมตีทั้งหมด",[12,231,232,233,235],{},"ผู้โจมตีเตรียม machine account ที่ถูกต้อง + รัน service ปลอม → CA ตาม ",[58,234,60],{}," ไปเชื่อข้อมูลที่ผู้โจมตีป้อน → DC ถูกปลอมตัวผ่าน certificate-based authentication และสิทธิ์ replication",[12,237,238],{},[239,240],"img",{"alt":241,"src":242,"width":243,"height":244},"Attack Flow","\u002Fimages\u002Fblogs\u002F2026-08-25-certighost-cve-2026-54121\u002Fimage-20260813-061101.341Z-6756.webp",920,700,[40,246,248],{"id":247},"lab","Lab",[12,250,251],{},"ทฤษฎีมาเยอะแล้ว มาลองของจริงบน lab กันดีกว่า",[227,253,255],{"id":254},"lab-environment","Lab environment",[45,257,258,264,273,286,294,300,306],{},[48,259,260,261],{},"AD forest ที่ functional level Windows Server 2016 ขึ้นไป (lab นี้ ",[16,262,263],{},"Windows Server 2025 functional level)",[48,265,266,267,199,270],{},"Domain Controller: ",[58,268,269],{},"CITY-CENTER.NIGHT.CITY",[58,271,272],{},"10.40.0.5",[48,274,275,276,279,280,199,283],{},"Enterprise CA: ",[58,277,278],{},"NCPD-CA"," บน ",[58,281,282],{},"ARASAKA.NIGHT.CITY",[58,284,285],{},"10.40.0.67",[48,287,288,289,291,292],{},"ค่า ",[58,290,99],{}," เป็นค่า default = ",[58,293,103],{},[48,295,296,297,299],{},"template ",[58,298,95],{}," ค่า default พร้อม ACL default",[48,301,302,303],{},"เครื่องผู้โจมตี: ",[58,304,305],{},"10.40.0.9",[48,307,308,309],{},"account Domain Users สิทธิ์ต่ำ 1 user: ",[58,310,311],{},"silver",[227,313,315],{"id":314},"poc-exploitation","PoC Exploitation",[12,317,318,319,329,330,333,334,337],{},"รัน PoC script จาก repo ",[320,321,325,326],"a",{"href":322,"rel":323},"https:\u002F\u002Fgithub.com\u002Faniqfakhrul\u002FCVE-2026-54121",[324],"nofollow","aniqfakhrul\u002F",[16,327,328],{},"CVE-2026-54121"," โดยที่ใช้ ",[58,331,332],{},"faketime"," ปรับเวลาให้ โดยดึงเวลาจาก DC (ผ่าน ",[58,335,336],{},"ntpdate",") มาตั้งให้ตรงกัน เพื่อกันปัญหา clock skew ของ Kerberos ที่ถ้าเวลาเครื่องเราต่างกับ DC เกินไป ticket จะใช้ไม่ได้",[339,340,345],"pre",{"className":341,"code":342,"language":343,"meta":344,"style":344},"language-bash shiki shiki-themes github-light","faketime \"$(ntpdate -q 10.40.0.5 | cut -d ' ' -f 1,2)\" python3 certighost.py -d night.city -u silver -p •••••••• --dc-ip 10.40.0.5\n","bash","",[58,346,347],{"__ignoreMap":344},[348,349,352,355,359,361,365,368,372,375,378,381,384,387,390,393,395,398,401,404,407,410,413],"span",{"class":350,"line":351},"line",1,[348,353,332],{"class":354},"s7eDp",[348,356,358],{"class":357},"sYBdl"," \"$(",[348,360,336],{"class":354},[348,362,364],{"class":363},"sYu0t"," -q",[348,366,367],{"class":363}," 10.40.0.5",[348,369,371],{"class":370},"sD7c4"," |",[348,373,374],{"class":354}," cut",[348,376,377],{"class":363}," -d",[348,379,380],{"class":357}," ' ' ",[348,382,383],{"class":363},"-f",[348,385,386],{"class":357}," 1,2)\"",[348,388,389],{"class":357}," python3",[348,391,392],{"class":357}," certighost.py",[348,394,377],{"class":363},[348,396,397],{"class":357}," night.city",[348,399,400],{"class":363}," -u",[348,402,403],{"class":357}," silver",[348,405,406],{"class":363}," -p",[348,408,409],{"class":357}," ••••••••",[348,411,412],{"class":363}," --dc-ip",[348,414,415],{"class":363}," 10.40.0.5\n",[12,417,418],{},[239,419],{"alt":420,"src":421,"width":422,"height":423},"Running the PoC script","\u002Fimages\u002Fblogs\u002F2026-08-25-certighost-cve-2026-54121\u002Fimage-20260813-075941.828Z-9099.webp",2560,599,[12,425,426],{},"ถึงจุดนี้ผู้โจมตีได้รับ certificate ที่ CA sign ให้ (city-center.pfx) ซึ่ง authenticate เป็น DC เป้าหมายได้ พร้อม hash และ Kerberos credential cache ของ account นั้น (city-center.ccache) เรียบร้อย",[227,428,81],{"id":429},"dcsync",[12,431,432,433,436],{},"account ของ Domain Controller มีสิทธิ์ ",[16,434,435],{},"directory replication"," ดังนั้นเมื่อได้ Kerberos credential มาแล้ว ผู้โจมตีก็ขอ secret ของ account ต่าง ๆ ได้",[339,438,440],{"className":341,"code":439,"language":343,"meta":344,"style":344},"faketime \"$(ntpdate -q 10.40.0.5 | cut -d ' ' -f 1,2)\" impacket-secretsdump -k -no-pass -dc-ip 10.40.0.5 '@CITY-CENTER.NIGHT.CITY'\n",[58,441,442],{"__ignoreMap":344},[348,443,444,446,448,450,452,454,456,458,460,462,464,466,469,472,475,478,480],{"class":350,"line":351},[348,445,332],{"class":354},[348,447,358],{"class":357},[348,449,336],{"class":354},[348,451,364],{"class":363},[348,453,367],{"class":363},[348,455,371],{"class":370},[348,457,374],{"class":354},[348,459,377],{"class":363},[348,461,380],{"class":357},[348,463,383],{"class":363},[348,465,386],{"class":357},[348,467,468],{"class":357}," impacket-secretsdump",[348,470,471],{"class":363}," -k",[348,473,474],{"class":363}," -no-pass",[348,476,477],{"class":363}," -dc-ip",[348,479,367],{"class":363},[348,481,482],{"class":357}," '@CITY-CENTER.NIGHT.CITY'\n",[12,484,485],{},[239,486],{"alt":487,"src":488,"width":422,"height":489},"DCSync with the cache credential","\u002Fimages\u002Fblogs\u002F2026-08-25-certighost-cve-2026-54121\u002Fimage-20260813-075854.012Z-8943.webp",1270,[40,491,493],{"id":492},"ล่าร่องรอย-จุดที่ใช้ตรวจหาการโจมตี-certighost","ล่าร่องรอย จุดที่ใช้ตรวจหาการโจมตี CertiGhost",[12,495,496],{},"ถ้าสงสัยว่าองค์กรอาจโดน CertiGhost ไปแล้ว ต่อไปนี้คือจุดที่เข้าไปไล่ดูได้ ย้ำก่อนว่านี่คือไอเดียที่ได้มาจาก public PoC, writeup และพฤติกรรมปกติของ Windows\u002FAD CS ยังไม่ใช่ IoC ที่คอนเฟิร์มแล้ว ให้ใช้เป็นจุดตั้งต้นในการหา ไม่ใช่ checklist สำเร็จรูป",[158,498,499],{},[48,500,501,502,505,506,509,510,513,514],{},"บน DC ให้ดู Security Event ID ",[58,503,504],{},"4741"," (computer account created) โดยเฉพาะ account ที่ถูกสร้างโดย user สิทธิ์ต่ำ และยิ่งน่าสงสัยถ้าเกิดขึ้นไม่นานก่อนจะมี activity แปลก ๆ ที่ฝั่ง CA ตัว PoC ตั้งชื่อ machine account แบบสุ่มโดยขึ้นต้นด้วย ",[58,507,508],{},"GHOST"," เช่น ",[58,511,512],{},"GHOSTKFXJXIMA$"," ซึ่ง match กับ regex: ",[58,515,516],{},"^GHOST[A-Z]{8}\\$$",[12,518,519],{},"แต่ให้ถือว่าเป็น quick check เท่านั้น เพราะชื่อนี้ผู้โจมตีแก้เองได้ง่าย ๆ และยังสามารถนำ machine account ที่มีอยู่แล้วมา reuse ได้ด้วย การไล่ดูที่ใครเป็นคนสร้างสำคัญกว่าตัวชื่อ",[12,521,522],{},[239,523],{"alt":524,"src":525,"width":526,"height":527},"Computer account created in Event Viewer","\u002Fimages\u002Fblogs\u002F2026-08-25-certighost-cve-2026-54121\u002Fimage-20260813-084044.563Z-1610.webp",2350,1578,[158,529,531],{"start":530},2,[48,532,533,534,537,538,196,540,542,543,196,545,547],{},"ค้นใน ",[58,535,536],{},"Attributes"," หา request attribute สองตัวที่ใช้ในการโจมตีนี้คือ ",[58,539,60],{},[58,541,138],{}," ใน Issued Certificates เพราะ ",[58,544,60],{},[58,546,138],{}," ไม่ใช่ attribute ที่โผล่มาใน enrollment ปกติทั่วไป",[12,549,550],{},[239,551],{"alt":552,"src":553,"width":422,"height":554},"Issued Certificates","\u002Fimages\u002Fblogs\u002F2026-08-25-certighost-cve-2026-54121\u002Fimage-20260813-084337.239Z-2603.png",425,[12,556,557,558,560,563,565,568,570],{},"โดย PoC จะส่งค่า:",[28,559],{},[58,561,562],{},"cdc: \u003CIP ของผู้โจมตี>",[28,564],{},[58,566,567],{},"rmd: \u003CFQDN ของ DC เป้าหมาย>",[28,569],{},[58,571,572],{},"CertificateTemplate: Machine",[12,574,575],{},[239,576],{"alt":577,"src":578,"width":579,"height":580},"Issued certificate properties","\u002Fimages\u002Fblogs\u002F2026-08-25-certighost-cve-2026-54121\u002Fimage-20260813-084356.386Z-6672.webp",798,938,[158,582,584,599,602],{"start":583},3,[48,585,586,587,590,591,594,595,598],{},"หา traffic ที่ CA เชื่อมต่อออกไปยัง TCP",[58,588,589],{},"445"," และ TCP",[58,592,593],{},"389"," ของเครื่องที่ ",[16,596,597],{},"ไม่ใช่ Domain Controller ตัวจริง"," เพราะ PoC จะเปิด rogue SMB\u002FLSA และ LDAP listener รอไว้บน port เหล่านี้",[48,600,601],{},"ถ้า account DC ทำ PKINIT authentication มาจาก address ที่ไม่ใช่ของ DC ตัวนั้น ถือว่าน่าสงสัยอย่างยิ่ง",[48,603,604,605,608],{},"Replication \u002F DCSync การ replicate โดย DC เป็นเรื่องปกติอยู่แล้ว ประเด็นที่น่าสนใจคือการที่ ",[16,606,607],{},"identity ของ DC ถูกใช้จากเครื่องที่ไม่ใช่ DC"," ฉะนั้นต้องเอาไป correlate กับ logon และ network telemetry ประกอบด้วย",[40,610,611],{"id":611},"วิธีการแก้ไข",[158,613,614],{},[48,615,616],{},"ติดตั้ง patch",[12,618,619,620],{},"ดูรายละเอียดและดาวน์โหลด update ได้ที่ ",[320,621,624,625],{"href":622,"rel":623},"https:\u002F\u002Fmsrc.microsoft.com\u002Fupdate-guide\u002Fvulnerability\u002FCVE-2026-54121",[324],"Microsoft Security Update Guide: ",[348,626,328],{},[158,628,629],{"start":530},[48,630,631,632,634,635,637,638,641],{},"Hot fix (กรณีลง update ทันทีไม่ได้): ปิด chase fallback",[28,633],{},"\nเราสามารถปิด code path ที่มีช่องโหว่ทิ้งไปทั้งหมดได้ด้วย policy flag เพราะ chase ที่ใช้ ",[58,636,60],{}," เป็นแค่ ",[35,639,640],{},"fallback feature"," ที่เป็น optional ไม่ใช่โค้ดที่รันทุก request อยู่แล้ว:",[339,643,647],{"className":644,"code":645,"language":646,"meta":344,"style":344},"language-powershell shiki shiki-themes github-light","certutil -setreg policy\\EditFlags -EDITF_ENABLECHASECLIENTDC\nRestart-Service CertSvc -Force\n","powershell",[58,648,649,654],{"__ignoreMap":344},[348,650,651],{"class":350,"line":351},[348,652,653],{},"certutil -setreg policy\\EditFlags -EDITF_ENABLECHASECLIENTDC\n",[348,655,656],{"class":350,"line":530},[348,657,658],{},"Restart-Service CertSvc -Force\n",[12,660,661,664,665,668],{},[16,662,663],{},"ย้ำว่านี่คือ mitigation ไม่ใช่ patch"," ถ้า ",[58,666,667],{},"EDITF_ENABLECHASECLIENTDC"," ถูกเปิดกลับมาบน CA ที่ยังไม่ได้ patch ไม่ว่าจะโดย admin หรือจาก group policy ช่องโหว่นี้ก็จะ exploit ได้อีกครั้ง",[12,670,671],{},"หมายเหตุ: hot fix นี้ถูกทดสอบเฉพาะใน lab ที่ควบคุมได้เท่านั้น ยังไม่ได้ทดสอบบน production CA จริง ก่อนนำไปใช้จริงควรลองบน staging CA ที่จำลอง environment จริงก่อน และยืนยันให้แน่ใจว่าไม่มี enrollment ปกติตัวไหนที่พึ่ง chase fallback อยู่ เพราะ request เหล่านั้นจะ fail ทันทีเมื่อ flag ถูกเคลียร์ออก สุดท้ายแล้ว July update ยังเป็นวิธีแก้ที่แนะนำอยู่ดี",[158,673,674],{"start":583},[48,675,676],{},"Hardening เพิ่มเติม",[45,678,679,689,695],{},[48,680,681,682,684,685,688],{},"ตั้งค่า ",[58,683,99],{}," เป็น ",[58,686,687],{},"0"," เพื่อไม่ให้ user ทั่วไปสร้าง machine account เองได้ ซึ่งเป็นส่วนสำคัญของการโจมตีนี้",[48,690,691,692,694],{},"รัดกุม ACL \u002F สิทธิ์ enroll ของ certificate template โดยเฉพาะ template ",[58,693,95],{}," และ template ที่ใช้ client authentication ได้",[48,696,697],{},"Monitor การ enroll certificate ที่ผิดปกติ และการสร้าง machine account โดย user สิทธิ์ต่ำ",[40,699,700],{"id":700},"ปิดท้าย",[12,702,703],{},"จบไปแล้วสำหรับการชำแหละ CertiGhost ในครั้งนี้ idea หลักของช่องโหว่คือ \"เชื่อ input จากผู้ร้องขอโดยไม่พิสูจน์\" ซึ่งเมื่อเกิดกับ identity material ของ certificate ก็นำไปสู่การยึด domain ได้",[12,705,706],{},"สิ่งที่อยากฝากไว้คือ อย่าเชื่อค่าที่ผู้ร้องขอส่งมาโดยไม่มีการพิสูจน์ ลองไล่ดูว่าค่าไหนในระบบที่ผู้ร้องขอกำหนดเองได้ และถูกตรวจสอบมากพอหรือยัง มุมมองนี้เอาไปปรับใช้กับระบบอื่นต่อได้",[40,708,710],{"id":709},"references","References",[45,712,713,719,726,732,739],{},[48,714,715,716],{},"certighost.py PoC ",[320,717,322],{"href":322,"rel":718},[324],[48,720,721,722],{},"Certipy (AD CS toolkit) ",[320,723,724],{"href":724,"rel":725},"https:\u002F\u002Fgithub.com\u002Fly4k\u002FCertipy",[324],[48,727,728,729],{},"Microsoft Security Update Guide: CVE-2026-54121 ",[320,730,622],{"href":622,"rel":731},[324],[48,733,734,735],{},"MS-WCCE: Windows Client Certificate Enrollment Protocol ",[320,736,737],{"href":737,"rel":738},"https:\u002F\u002Flearn.microsoft.com\u002Fen-us\u002Fopenspecs\u002Fwindows_protocols\u002Fms-wcce\u002F",[324],[48,740,741],{},"Original writeup โดย @h0j3n และ @aniqfakhrul",[40,743,745],{"id":744},"advertorial","Advertorial",[12,747,748],{},"ความเสี่ยงลักษณะนี้ใน Active Directory และ AD CS ขององค์กรหาเจอได้ด้วยการทำ VA\u002FPentest",[12,750,751],{},"หากต้องการคำแนะนำเพิ่มเติม ทีมงานของเรายินดีให้คำปรึกษา ติดต่อเราได้เลยครับ",[753,754,755],"style",{},"html pre.shiki code .s7eDp, html code.shiki .s7eDp{--shiki-default:#6F42C1}html pre.shiki code .sYBdl, html code.shiki .sYBdl{--shiki-default:#032F62}html pre.shiki code .sYu0t, html code.shiki .sYu0t{--shiki-default:#005CC5}html pre.shiki code .sD7c4, html code.shiki .sD7c4{--shiki-default:#D73A49}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}",{"title":344,"searchDepth":530,"depth":530,"links":757},[758,759,760,761,764,769,770,771,772,773],{"id":42,"depth":530,"text":43},{"id":116,"depth":530,"text":117},{"id":148,"depth":530,"text":149},{"id":189,"depth":530,"text":190,"children":762},[763],{"id":229,"depth":583,"text":229},{"id":247,"depth":530,"text":248,"children":765},[766,767,768],{"id":254,"depth":583,"text":255},{"id":314,"depth":583,"text":315},{"id":429,"depth":583,"text":81},{"id":492,"depth":530,"text":493},{"id":611,"depth":530,"text":611},{"id":700,"depth":530,"text":700},{"id":709,"depth":530,"text":710},{"id":744,"depth":530,"text":745},"2026-08-25","CertiGhost (CVE-2026-54121) ช่องโหว่ใน AD CS ที่ให้ domain user สิทธิ์ต่ำปลอมตัวเป็น DC และขยายผลไปยึด domain ได้",false,"md",[779,782,785,788,791,794],{"q":780,"a":781},"CertiGhost เป็นช่องโหว่ ESC ตัวใหม่ของ AD CS ใช่ไหม","CertiGhost ไม่ได้จัดอยู่ในกลุ่ม ESC1-ESC16 ที่ toolkit อย่าง Certipy รวบรวมไว้ เพราะ ESC ส่วนใหญ่เกิดจาก template หรือ ACL ที่ admin ตั้งค่าพลาด แต่ CertiGhost เป็น bug ใน logic ของตัว CA เองที่เชื่อ chase target จากผู้ร้องขอโดยไม่พิสูจน์ ซึ่งหมายความว่าต่อให้คุณ hardening template และสิทธิ์ enroll ตามแนวทาง ESC ครบทุกข้อแล้ว CA ที่ยังไม่ patch ก็ยังโดนได้อยู่ดี การแก้จึงต้องพึ่ง security update เป็นหลัก",{"q":783,"a":784},"ลง patch กรกฎาคม 2026 แล้ว การ enroll แบบข้าม domain ที่ใช้ chase ยังทำงานปกติไหม","patch ไม่ได้ตัด chase ทิ้งทั้งหมดแบบ hot fix แต่เพิ่มการตรวจว่า host ที่ระบุใน cdc เป็น Domain Controller จริงก่อนจะยอมเชื่อข้อมูล identity ที่ส่งกลับมา ดังนั้น enrollment ที่พึ่ง chase อย่างถูกต้องจะยังใช้งานได้ต่อ ต่างจากการเคลียร์ flag EDITF_ENABLECHASECLIENTDC ที่จะทำให้ request ซึ่งใช้ chase fail ทันที ถ้าองค์กรของคุณมี workflow แบบ cross-domain enrollment อยู่ การลง patch จึงกระทบงานปกติน้อยกว่าการปิด fallback ทิ้ง",{"q":786,"a":787},"ตั้ง ms-DS-MachineAccountQuota เป็น 0 แล้วกัน CertiGhost ได้ 100% เลยไหม","การตั้งเป็น 0 ช่วยตัดวิธีที่ง่ายที่สุด คือกันไม่ให้ user สิทธิ์ต่ำสร้าง machine account ใหม่มาทำเป็น domain principal ปลอม แต่มันไม่ได้แก้ที่ตัวช่องโหว่ ผู้โจมตีที่มี machine account อยู่แล้ว หรือคุมเครื่องที่ join domain อยู่ ก็ยัง reuse account เดิมมาเดิน chain นี้ต่อได้ hardening นี้ลด attack surface แต่ไม่ได้แทน patch",{"q":789,"a":790},"ถ้าสงสัยว่า CA โดน CertiGhost ไปแล้ว ต้องกู้คืนยังไง","เพราะปลายทางของการโจมตีนี้คือ DCSync ที่ดึง krbtgt ออกไป การลง patch ย้อนหลังเพียงอย่างเดียวไม่พอ คุณต้อง reset password ของ account krbtgt สองรอบ โดยเว้นระยะให้ replication เสร็จก่อนรอบที่สอง เพื่อ invalidate golden ticket ที่อาจถูกสร้างไว้แล้ว จากนั้นควร revoke certificate ที่ CA ออกให้อย่างน่าสงสัย และ reset credential ของ account สิทธิ์สูงที่อาจรั่วไปตอน dump secret ด้วย",{"q":792,"a":793},"certificate ที่ CA เผลอออกให้ผู้โจมตีไปแล้ว revoke ทีหลังให้หมดฤทธิ์ได้ไหม","revoke ได้และควรทำ แต่ต้องเข้าใจว่า revocation จะได้ผลก็ต่อเมื่อปลายทางเช็ค CRL หรือ OCSP จริง ซึ่งบางเส้นทางของ PKINIT ไม่ได้เช็คเสมอไป ที่สำคัญกว่านั้นคือถ้าผู้โจมตีทำ DCSync ดึง credential ออกไปได้แล้ว ตัว credential เหล่านั้นจะยังใช้งานได้ต่อแม้ certificate จะถูก revoke ไปแล้ว การ revoke จึงเป็นแค่ส่วนหนึ่งของการกู้คืน ต้องทำควบคู่กับการ reset credential เสมอ",{"q":795,"a":796},"CertiGhost โจมตีจากภายนอกโดยไม่มี account ในระบบได้เลยไหม","ไม่ได้ ผู้โจมตีต้องถือ credential ของ domain user สิทธิ์ต่ำอย่างน้อยหนึ่ง account อยู่ในมือก่อน จึงจะเริ่ม chain นี้ได้ ช่องโหว่นี้จึงเป็นเครื่องมือสำหรับ privilege escalation และ lateral movement หลังผู้โจมตีตั้งหลักใน network ได้แล้ว ไม่ใช่ initial access จากอินเทอร์เน็ตโดยตรง สิ่งที่ทำให้มันอันตรายคือระยะจาก user ธรรมดาไปถึงระดับ domain admin นั้นสั้นมาก","\u002Fimages\u002Fblogs\u002F2026-08-25-certighost-cve-2026-54121\u002Fimage-20260917-042953.815Z-320.webp","th","2026-09-16","certighost-cve-2026-54121",{},true,"\u002Fblogs\u002F2026-08-25-certighost-cve-2026-54121",{"title":6,"description":775},"blogs\u002F2026-08-25-certighost-cve-2026-54121",[807,808,809,810],"pentest","red-teaming","active-directory","vulnerability","ARTICLES","kSA6LcJrFkEHp07MY6YOvwL0CBB4wscF14R8o_OPYcY",[814,825,834],{"id":815,"link":816,"title":817,"description":818,"image":819,"date":820,"type":811,"author":821,"tags":822},"content\u002Fblogs\u002F2026-08-10-ker-delg-pt1.md","ker-delg-pt1","Kerberos Delegation Attacks Part 1: Unconstrained Delegation","Kerberos Delegation ถูกสร้างมาเพื่อรองรับ multi-tier application แต่ trust relationship ที่ให้สิทธิ์สูงของมันก็เปิดช่องให้ attacker ปลอมเป็นผู้ใช้และทำ lateral movement ได้ถ้าตั้งค่าผิด","\u002Fimages\u002Fblogs\u002F2026-08-10-ker-delg-pt1\u002Fimage-20260803-161404.426Z-1207.png","2026-08-10","Wisarud Wongta",[807,808,809,823,824],"kerberos","windows-security",{"id":826,"link":827,"title":828,"description":829,"image":830,"date":831,"type":811,"author":832,"tags":833},"content\u002Fblogs\u002F2025-07-23-microsoft-officially-deprecates-ntlm-authentication-protocol-in-windows.md","microsoft-officially-deprecates-ntlm-authentication-protocol-in-windows","NTLM Authentication กำลังจะกลายเป็นอดีตจริงหรือ ?","Microsoft ออกมาประกาศว่า NTLM จะถูก deprecated อย่างเป็นทางการใน Windows 11 24H2 และ Windows Server 2025","\u002Fimages\u002Fblogs\u002F2025-07-23-microsoft-officially-deprecates-ntlm-authentication-protocol-in-windows\u002Fimages-416a6d4f-ce6a-4320-b51a-d5cc4e3b18d9.jpg","2025-07-23","Athittaya Saeloh",[824,809,823,807,808],{"id":835,"link":836,"title":837,"description":838,"image":839,"date":840,"type":811,"author":841,"tags":842},"content\u002Fblogs\u002F2021-08-27-pave-the-way-to-domain-admins-with-bloodhound.md","pave-the-way-to-domain-admins-with-bloodhound","Pave the way to Domain Admins with BloodHound","ก่อนมี BloodHound การไล่หาเส้นทางสู่ Domain Admins กินเวลามาก บทความแสดงว่าเครื่องมือนี้ย่นขั้นตอนให้ pentester ได้อย่างไร","\u002Fimages\u002Fblogs\u002F2021-08-27-pave-the-way-to-domain-admins-with-bloodhound\u002Ffull.png","2021-08-27","Incognito Lab",[809,807,808,824],[],1791794322453]