diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7877480..8b362c3 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,10 @@
 # Changelog
 All notable changes to this project will be documented in this file.
 
+## [0.11.2] - 2019-11-26
+### Fixes
+- Fix `get_template` when AWS doesn't return a dict.
+
 ## [0.11.1] - 2019-11-25
 ### Changed
 - `HardcodedRDSPasswordRule` now reports two different messages when there is a missing echo or a readable password.
diff --git a/cfripper/boto3_client.py b/cfripper/boto3_client.py
index 73e7121..29a4a7a 100644
--- a/cfripper/boto3_client.py
+++ b/cfripper/boto3_client.py
@@ -15,6 +15,7 @@ specific language governing permissions and limitations under the License.
 import logging
 from datetime import datetime
 from time import sleep
+from typing import Dict, Optional
 
 import boto3
 from botocore.exceptions import ClientError
@@ -47,7 +48,7 @@ class Boto3Client:
         self.region = region
         self.stack_id = stack_id
 
-    def get_template(self):
+    def get_template(self) -> Optional[Dict]:
         client = self.session.client("cloudformation", region_name=self.region)
         stack_content = None
         i = 0
@@ -70,7 +71,10 @@ class Boto3Client:
                         f" {self.stack_id} on {self.account_id} - {self.region}"
                     )
             i += 1
-        return stack_content
+        # Fix when AWS doesn't return a dict
+        # https://github.com/boto/botocore/issues/1058
+        # https://github.com/boto/boto3/issues/1468
+        return convert_json_or_yaml_to_dict(stack_content) if isinstance(stack_content, str) else stack_content
 
     def download_template_to_dictionary(self, s3_url):
         """
diff --git a/requirements.txt b/requirements.txt
index bcf3522..44b2162 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -4,16 +4,16 @@
 #
 #    make freeze
 #
-boto3==1.10.6
-botocore==1.13.6          # via boto3, s3transfer
-cfn-flip==1.2.1
+boto3==1.10.27
+botocore==1.13.27         # via boto3, s3transfer
+cfn-flip==1.2.2
 click==7.0                # via cfn-flip
 docutils==0.15.2          # via botocore
 jmespath==0.9.4           # via boto3, botocore
-pycfmodel==0.5.0
-pydantic==1.0             # via pycfmodel
+pycfmodel==0.6.0
+pydantic==1.1.1           # via pycfmodel
 python-dateutil==2.8.0    # via botocore
 pyyaml==5.1.2
 s3transfer==0.2.1         # via boto3
-six==1.12.0               # via cfn-flip, python-dateutil
-urllib3==1.25.6           # via botocore
+six==1.13.0               # via cfn-flip, python-dateutil
+urllib3==1.25.7           # via botocore
diff --git a/setup.py b/setup.py
index 89a3f9c..ffd58d8 100644
--- a/setup.py
+++ b/setup.py
@@ -17,7 +17,7 @@ dev_requires = [
 
 setup(
     name="cfripper",
-    version="0.11.1",
+    version="0.11.2",
     author="Skyscanner Product Security",
     author_email="security@skyscanner.net",
     long_description=long_description,

Error while parsing template with pycfmodel
Hi guys. I get the following error when I ran the lambda

```
[ERROR] TypeError: ModelMetaclass object argument after ** must be a mapping, not str
Traceback (most recent call last):
  File "/var/task/cfripper/main.py", line 119, in handler
    cfmodel = pycfmodel.parse(template).resolve()
  File "/var/task/pycfmodel/__init__.py", line 19, in parse
    return CFModel(**template)
```
I've checked and it seems that the `template` is parsed indeed, but instead of a dict, it is a string. Do you have any clues why this might be happening?

Atm I am triggering the lambda with a test input like this
```
{
  "project": "test",
  "stack": {
    "name": "stack-name"
  },
  "region": "eu-west-1",
  "account": {
    "id": 1122334455
  }
}
```
diff --git a/tests/test_boto3_client.py b/tests/test_boto3_client.py
index 755a6ca..2105921 100644
--- a/tests/test_boto3_client.py
+++ b/tests/test_boto3_client.py
@@ -43,9 +43,11 @@ def boto3_client():
 @pytest.mark.parametrize(
     "aws_responses, expected_template",
     [
-        (["nice template"], "nice template"),
+        ([{"A": "a"}], {"A": "a"}),
         ([DUMMY_CLIENT_ERROR] * 10, None),
-        ([DUMMY_CLIENT_ERROR, "nice template"], "nice template"),
+        ([DUMMY_CLIENT_ERROR, {"A": "a"}], {"A": "a"}),
+        (['{"A": "a"}'], {"A": "a"}),
+        (["A: a"], {"A": "a"}),
     ],
 )
 def test_get_template(aws_responses, expected_template, boto3_client):

pip install -e .[dev]
parse_log_pytest
requirements.txt
boto3 pyyaml pytest moto requests
apt-get update apt-get install -y gcc
3.9
requirements.txt
pytest --no-header -rA --tb=line --color=no -p no:cacheprovider -W ignore::DeprecationWarning
annotated-types==0.7.0
appdirs==1.4.4
attrs==25.3.0
aws-sam-translator==1.95.0
aws-xray-sdk==2.14.0
black==19.10b0
boto==2.49.0
boto3==1.37.23
botocore==1.37.23
certifi==2025.1.31
cffi==1.17.1
cfn-flip==1.2.1
cfn-lint==1.32.1
-e git+https://github.com/Skyscanner/cfripper.git@db0bcdecf65ab6ba808c268476ccc28b3ad78460#egg=cfripper
charset-normalizer==3.4.1
Click==7.0
coverage==7.8.0
cryptography==44.0.2
DateTime==5.5
docker==5.0.3
docutils==0.15.2
ecdsa==0.19.1
exceptiongroup==1.2.2
flake8==7.2.0
idna==2.8
iniconfig==2.1.0
isort==4.3.21
Jinja2==3.1.6
jmespath==0.9.4
jsondiff==1.1.2
jsonpatch==1.33
jsonpointer==3.0.0
jsonschema==4.23.0
jsonschema-specifications==2024.10.1
MarkupSafe==3.0.2
mccabe==0.7.0
mock==5.2.0
moto==1.3.13
mpmath==1.3.0
networkx==3.2.1
packaging==24.2
pathspec==0.12.1
pip-tools==4.2.0
pluggy==1.5.0
pyasn1==0.4.8
pycfmodel==1.1.0
pycodestyle==2.13.0
pycparser==2.22
pydantic==2.11.1
pydantic_core==2.33.0
pyflakes==3.3.2
pytest==8.3.5
pytest-cov==6.0.0
python-dateutil==2.8.0
python-jose==3.4.0
pytz==2025.2
PyYAML==6.0.2
referencing==0.36.2
regex==2024.11.6
requests==2.32.3
responses==0.25.7
rpds-py==0.24.0
rsa==4.9
s3transfer==0.11.4
six==1.12.0
sshpubkeys==3.3.1
sympy==1.13.3
toml==0.10.2
tomli==2.2.1
typed-ast==1.5.5
typing-inspection==0.4.0
typing_extensions==4.13.0
urllib3==1.25.11
websocket-client==1.8.0
Werkzeug==3.1.3
wrapt==1.17.2
xmltodict==0.14.2
zope.interface==7.2

name: cfripper
channels:
  - defaults
  - https://repo.anaconda.com/pkgs/main
  - https://repo.anaconda.com/pkgs/r
  - conda-forge
dependencies:
  - _libgcc_mutex=0.1=main
  - _openmp_mutex=5.1=1_gnu
  - ca-certificates=2025.2.25=h06a4308_0
  - ld_impl_linux-64=2.40=h12ee557_0
  - libffi=3.4.4=h6a678d5_1
  - libgcc-ng=11.2.0=h1234567_1
  - libgomp=11.2.0=h1234567_1
  - libstdcxx-ng=11.2.0=h1234567_1
  - ncurses=6.4=h6a678d5_0
  - openssl=3.0.16=h5eee18b_0
  - pip=25.0=py39h06a4308_0
  - python=3.9.21=he870216_1
  - readline=8.2=h5eee18b_0
  - setuptools=75.8.0=py39h06a4308_0
  - sqlite=3.45.3=h5eee18b_0
  - tk=8.6.14=h39e8969_0
  - tzdata=2025a=h04d1e81_0
  - wheel=0.45.1=py39h06a4308_0
  - xz=5.6.4=h5eee18b_1
  - zlib=1.2.13=h5eee18b_1
  - pip:
      - annotated-types==0.7.0
      - appdirs==1.4.4
      - attrs==25.3.0
      - aws-sam-translator==1.95.0
      - aws-xray-sdk==2.14.0
      - black==19.10b0
      - boto==2.49.0
      - boto3==1.37.23
      - botocore==1.37.23
      - certifi==2025.1.31
      - cffi==1.17.1
      - cfn-flip==1.2.1
      - cfn-lint==1.32.1
      - cfripper==0.11.1
      - charset-normalizer==3.4.1
      - click==7.0
      - coverage==7.8.0
      - cryptography==44.0.2
      - datetime==5.5
      - docker==5.0.3
      - docutils==0.15.2
      - ecdsa==0.19.1
      - exceptiongroup==1.2.2
      - flake8==7.2.0
      - idna==2.8
      - iniconfig==2.1.0
      - isort==4.3.21
      - jinja2==3.1.6
      - jmespath==0.9.4
      - jsondiff==1.1.2
      - jsonpatch==1.33
      - jsonpointer==3.0.0
      - jsonschema==4.23.0
      - jsonschema-specifications==2024.10.1
      - markupsafe==3.0.2
      - mccabe==0.7.0
      - mock==5.2.0
      - moto==1.3.13
      - mpmath==1.3.0
      - networkx==3.2.1
      - packaging==24.2
      - pathspec==0.12.1
      - pip-tools==4.2.0
      - pluggy==1.5.0
      - pyasn1==0.4.8
      - pycfmodel==1.1.0
      - pycodestyle==2.13.0
      - pycparser==2.22
      - pydantic==2.11.1
      - pydantic-core==2.33.0
      - pyflakes==3.3.2
      - pytest==8.3.5
      - pytest-cov==6.0.0
      - python-dateutil==2.8.0
      - python-jose==3.4.0
      - pytz==2025.2
      - pyyaml==6.0.2
      - referencing==0.36.2
      - regex==2024.11.6
      - requests==2.32.3
      - responses==0.25.7
      - rpds-py==0.24.0
      - rsa==4.9
      - s3transfer==0.11.4
      - six==1.12.0
      - sshpubkeys==3.3.1
      - sympy==1.13.3
      - toml==0.10.2
      - tomli==2.2.1
      - typed-ast==1.5.5
      - typing-extensions==4.13.0
      - typing-inspection==0.4.0
      - urllib3==1.25.11
      - websocket-client==1.8.0
      - werkzeug==3.1.3
      - wrapt==1.17.2
      - xmltodict==0.14.2
      - zope-interface==7.2
prefix: /opt/conda/envs/cfripper

tests/test_boto3_client.py::test_get_template[aws_responses3-expected_template3] tests/test_boto3_client.py::test_get_template[aws_responses4-expected_template4]
tests/test_boto3_client.py::test_valid_json tests/test_boto3_client.py::test_valid_yaml tests/test_boto3_client.py::test_valid_yaml_with_cf_shorthand_ref tests/test_boto3_client.py::test_valid_yaml_with_cf_shorthand_join tests/test_boto3_client.py::test_valid_yaml_with_cf_getatt_array_syntax tests/test_boto3_client.py::test_valid_yaml_with_cf_getatt_dotsyntax tests/test_boto3_client.py::test_url_with_path_prefix tests/test_boto3_client.py::test_urlencoded_url
tests/test_boto3_client.py::test_get_template[aws_responses0-expected_template0] tests/test_boto3_client.py::test_get_template[aws_responses1-None] tests/test_boto3_client.py::test_get_template[aws_responses2-expected_template2] tests/test_boto3_client.py::test_valid_yaml_as_bytes tests/test_boto3_client.py::test_invalid_format tests/test_boto3_client.py::test_invalid_url
setup.py cfripper/boto3_client.py requirements.txt CHANGELOG.md
setup.py cfripper/boto3_client.py requirements.txt CHANGELOG.md