Skip to content

Segmentation fault when encrypting using EncryptionType.CONTENT #83

@joroque

Description

@joroque

I'm getting a Segmentation fault: 11 error when I try to encrypt an XML document using xmlsec.EncryptionType.CONTENT. It works using xmlsec.EncryptionType.ELEMENT though.

Here's the code and the XML document.

from lxml import etree
import xmlsec

namespaces = {
    'soap': 'http://schemas.xmlsoap.org/soap/envelope/'
}

manager = xmlsec.KeysManager()
key = xmlsec.Key.from_file('certificate.pem', xmlsec.KeyFormat.CERT_PEM, None)
manager.add_key(key)
template = etree.parse('document.xml').getroot()
enc_data = xmlsec.template.encrypted_data_create(
template, xmlsec.Transform.AES128, type=xmlsec.EncryptionType.CONTENT, ns='xenc')
xmlsec.template.encrypted_data_ensure_cipher_value(enc_data)
key_info = xmlsec.template.encrypted_data_ensure_key_info(enc_data, ns='dsig')
enc_key = xmlsec.template.add_encrypted_key(key_info, xmlsec.Transform.RSA_PKCS1)
xmlsec.template.encrypted_data_ensure_cipher_value(enc_key)
data = template.find('soap:Body', namespaces=namespaces)
enc_ctx = xmlsec.EncryptionContext(manager)
enc_ctx.key = xmlsec.Key.generate(xmlsec.KeyData.AES, 192, xmlsec.KeyDataType.SESSION)
enc_ctx.encrypt_xml(enc_data, data)

document.xml.txt

And here's some lldb info I gathered:

Process 82119 stopped
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
    frame #0: 0x00000001085e23bc xmlsec.so`PyXmlSec_ClearReplacedNodes + 47
xmlsec.so`PyXmlSec_ClearReplacedNodes:
->  0x1085e23bc <+47>: decq   (%rax)
    0x1085e23bf <+50>: jne    0x1085e23e5               ; <+88>
    0x1085e23c1 <+52>: movq   %r15, %rdi
    0x1085e23c4 <+55>: movq   %rbx, %rsi
Target 0: (python) stopped.
(lldb) bt
* thread #1, queue = 'com.apple.main-thread', stop reason = EXC_BAD_ACCESS (code=1, address=0x0)
  * frame #0: 0x00000001085e23bc xmlsec.so`PyXmlSec_ClearReplacedNodes + 47
    frame #1: 0x00000001085e1f6d xmlsec.so`PyXmlSec_EncryptionContextEncryptXml + 368
    frame #2: 0x0000000100112f2d Python`PyEval_EvalFrameEx + 10117
    frame #3: 0x00000001001105b6 Python`PyEval_EvalCodeEx + 1551
    frame #4: 0x00000001000b6d36 Python`function_call + 327
    frame #5: 0x00000001000993cd Python`PyObject_Call + 97
    frame #6: 0x0000000100115314 Python`PyEval_EvalFrameEx + 19308
    frame #7: 0x00000001001105b6 Python`PyEval_EvalCodeEx + 1551
    frame #8: 0x00000001000b6d36 Python`function_call + 327
    frame #9: 0x00000001000993cd Python`PyObject_Call + 97
    frame #10: 0x0000000100115314 Python`PyEval_EvalFrameEx + 19308
    frame #11: 0x00000001001105b6 Python`PyEval_EvalCodeEx + 1551
    frame #12: 0x0000000100118d65 Python`fast_function + 290
    frame #13: 0x0000000100112e6d Python`PyEval_EvalFrameEx + 9925
    frame #14: 0x00000001001105b6 Python`PyEval_EvalCodeEx + 1551
    frame #15: 0x0000000100118d65 Python`fast_function + 290
    frame #16: 0x0000000100112e6d Python`PyEval_EvalFrameEx + 9925
    frame #17: 0x00000001001105b6 Python`PyEval_EvalCodeEx + 1551
    frame #18: 0x0000000100118d65 Python`fast_function + 290
    frame #19: 0x0000000100112e6d Python`PyEval_EvalFrameEx + 9925
    frame #20: 0x00000001001105b6 Python`PyEval_EvalCodeEx + 1551
    frame #21: 0x000000010010ffa1 Python`PyEval_EvalCode + 32
    frame #22: 0x000000010013110b Python`run_mod + 49
    frame #23: 0x00000001001311b2 Python`PyRun_FileExFlags + 130
    frame #24: 0x0000000100130d34 Python`PyRun_SimpleFileExFlags + 706
    frame #25: 0x0000000100141dfe Python`Py_Main + 3030
    frame #26: 0x00007fffc4665235 libdyld.dylib`start + 1
    frame #27: 0x00007fffc4665235 libdyld.dylib`start + 1

Environments

I was to reproduce in the following environments.

macOS Sierra 10.12.6

  • libxmlsec1 1.2.25 1.2.26
  • libxml2 2.9.6 2.9.7
  • xmlsec (1.3.3)
$ pkg-config --cflags xmlsec1
-D__XMLSEC_FUNCTION__=__func__ -DXMLSEC_NO_SIZE_T -DXMLSEC_NO_GOST=1 -DXMLSEC_NO_GOST2012=1 -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING=1 -DXMLSEC_CRYPTO_OPENSSL=1 -I/usr/local/Cellar/libxmlsec1/1.2.26/include/xmlsec1 -I/usr/local/opt/openssl/include -I/usr/local/opt/openssl/include/openssl -I/usr/include/libxml2

Ubuntu 14.04.3 LTS

  • libxml2:amd64 2.9.1+dfsg1-3ubuntu4.12
  • libxmlsec1 1.2.18-2ubuntu1
  • xmlsec 1.3.3
$ pkg-config --cflags xmlsec1
-DXMLSEC_CRYPTO=\"openssl\" -D__XMLSEC_FUNCTION__=__FUNCTION__ -DXMLSEC_NO_SIZE_T -DXMLSEC_NO_GOST=1 -DXMLSEC_NO_XKMS=1 -DXMLSEC_NO_CRYPTO_DYNAMIC_LOADING=1 -DXMLSEC_OPENSSL_098=1 -DXMLSEC_CRYPTO_OPENSSL=1 -I/usr/include/libxml2 -I/usr/include/xmlsec1 

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions